elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Probelma en C. Ayuda!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Probelma en C. Ayuda!!!  (Leído 2,848 veces)
jhonsc

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Probelma en C. Ayuda!!!
« en: 14 Enero 2012, 15:12 pm »

Buenas, estoy aprendiendo C (tengo un nivel muy bajo), y al hacer un programa con este código:
Código
  1. #include <stdio.h>
  2.  
  3. main(int argc, char *argv[])
  4. {
  5.  char n1, n2, operador;
  6.  int resultado;
  7.  n1=atoi(argv[1]);
  8.  operador=atoi(argv[2]);
  9.  n2=atoi(argv[3]);
  10.  if (operador=='+')
  11.  {
  12.     resultado=n1+n2;
  13.     printf("El resultado de sumar %d y %d es: %d\n", n1, n2, resultado);
  14.     salir();
  15.  }
  16.  if (operador=='-')
  17.  {
  18.    resultado=n1-n2;
  19.    printf("El resultado de restar %d y %d es: %d\n", n1, n2, resultado);
  20.    salir();
  21.  }
  22.  if (operador=='*')
  23.  {
  24.    resultado=n1*n2;
  25.    printf("El resultado de multiplicar %d y %d es: %d\n", n1, n2, resultado);
  26.    salir();
  27.  }
  28.  if (operador=='/')
  29.  {
  30.    resultado=n1/n2;
  31.    printf("El resultado de dividir %d y %d es: %d\n", n1, n2, resultado);
  32.    salir();
  33.  }
  34.  if (operador!='+' && operador!='-' && operador!='*' && operador!='/')
  35.  {
  36.    printf("Operador no reconocido. Utilize uno de los siguientes operadores:\n"
  37.           "-Suma:             \"+\"\n"
  38.           "-Resta:            \"-\"\n"
  39.           "-Multiplicación:   \"*\"\n"
  40.           "-División:         \"/\"\n"
  41.           "Utilize los operadores con el siguiente formato: número operador número.\n");
  42.    salir();
  43.  }
  44.  }
  45.  
  46. int salir()
  47. {
  48.  return 0;
  49. }
  50.  
...no obtengo el resultado esperado. En vex de esto obtengo el mensaje de que no he introducido ningún operador:
Código:
$ gcc -o ys pasa.c
$ ./ys 5 + 6
Operador no reconocido. Utilize uno de los siguientes operadores:
-Suma:             "+"
-Resta:            "-"
-Multiplicación:   "*"
-División:         "/"
Utilize los operadores con el siguiente formato: número operador número.
$
Le he dado muchas vueltas al código y no encuentro el error. Muchas gracias por adelantado.


« Última modificación: 14 Enero 2012, 16:14 pm por jhonsc » En línea

“Vive rápido, muere joven y deja un bonito cadáver”
"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."
"Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad."
Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: Probelma en C. Ayuda!!!
« Respuesta #1 en: 14 Enero 2012, 17:08 pm »

Hola he visto que estabas usando tipos de datos incorrectos para lo que quieres hacer , la variable operador no la puedes recuperar con atoi , recuerda que es un signo , y un signo, he tocado tu código , ahora ya funciona...

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. main(int argc, char *argv[])
  5. {
  6. char operador;
  7. int resultado = 0;
  8. int n1 = 0 , n2 = 0;
  9.  
  10. n1=atoi(argv[1]);
  11. //operador=atoi(argv[2]);
  12. strcpy(&operador , argv[2]) ;
  13.  
  14. n2=atoi(argv[3]);
  15. if (operador=='+')
  16. {
  17.    resultado = n1 + n2;
  18.    printf("El resultado de sumar %d y %d es: %d\n", n1, n2, resultado);
  19.    salir();
  20. }
  21. if (operador=='-')
  22. {
  23.   resultado=n1-n2;
  24.   printf("El resultado de restar %d y %d es: %d\n", n1, n2, resultado);
  25.   salir();
  26. }
  27. if (operador=='*')
  28. {
  29.   resultado=n1*n2;
  30.   printf("El resultado de multiplicar %d y %d es: %d\n", n1, n2, resultado);
  31.   salir();
  32. }
  33. if (operador=='/')
  34. {
  35.   resultado=n1/n2;
  36.   printf("El resultado de dividir %d y %d es: %d\n", n1, n2, resultado);
  37.   salir();
  38. }
  39. if (operador!='+' && operador!='-' && operador!='*' && operador!='/')
  40. {
  41.   printf("Operador no reconocido. Utilize uno de los siguientes operadores:\n"
  42.          "-Suma:             \"+\"\n"
  43.          "-Resta:            \"-\"\n"
  44.          "-Multiplicación:   \"*\"\n"
  45.          "-División:         \"/\"\n"
  46.          "Utilize los operadores con el siguiente formato: número operador número.\n");
  47.   salir();
  48. }
  49. }
  50.  
  51. int salir()
  52. {
  53. return 0;
  54. }
  55.  


En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Probelma en C. Ayuda!!!
« Respuesta #2 en: 14 Enero 2012, 17:18 pm »

Todo correcto salvo un detalle: no se debe utilizar la función "strcmp" de esa forma ya que "operador" no es un array, solo se puede almacenar en esta un carácter.

Basta con utilizar directamente el valor del carácter argv[2][0] o bien copiar este en la variable operador:
Código
  1. operador = argv[2][0];

Un saludo

En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: Probelma en C. Ayuda!!!
« Respuesta #3 en: 14 Enero 2012, 19:30 pm »

Oh, y otra cosa. No tiene nada que ver con programación en C/C++ pero tengo que decirlo >.<

"Utilice" va con c, no con z. ¡No te lo tomes a mal, por favor! A mí me gustaría que me corrigieran si me equivoco  ;)

¡Saludos!
En línea

jhonsc

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Re: Probelma en C. Ayuda!!!
« Respuesta #4 en: 14 Enero 2012, 19:53 pm »

No me lo tomo a mal para nada, tranquilo. Gracias por la ayuda!
En línea

“Vive rápido, muere joven y deja un bonito cadáver”
"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."
"Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad."
jhonsc

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Re: Probelma en C. Ayuda!!!
« Respuesta #5 en: 15 Enero 2012, 15:45 pm »

Siento salir ahora con otra duda, pero, si quiero sumar dos decimales, y que el resultado se decimal que hago?¿ Esto es lo que llevo:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. main(int argc, char *argv[])
  5. {
  6. float n1, n2, resultado;
  7. n1=atoi(argv[1]);
  8. n2=atoi(argv[2]);
  9. resultado = n1 + n2;
  10. printf("El resultado de sumar %f y %f es: %f\n", n1, n2, resultado);
  11. salir();
  12. }
  13.  
  14. int salir()
  15. {
  16. return 0;
  17. }
  18.  
El resultado es esta:
Código:
$ ./pam 3.5 + 3.4
El resultado de sumar 3.000000 y 3.000000 es: 6.000000
$
Cuando lo que espero es que me salga es:
Código:
$ ./pam 3.5 + 3.4
El resultado de sumar 3.500000 y 3.400000 es: 6.900000
$
En línea

“Vive rápido, muere joven y deja un bonito cadáver”
"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."
"Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad."
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Probelma en C. Ayuda!!!
« Respuesta #6 en: 15 Enero 2012, 16:09 pm »

El problema se debe a que estas utilizando la función "atoi" para la conversión y ella es quien descarta (mas bien se detiene al encontrar) la parte decimal.

Sustituye el uso de esa función por "atof", su uso es similar pero retorna un numero de punto flotante (tipo double).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
jhonsc

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Re: Probelma en C. Ayuda!!!
« Respuesta #7 en: 15 Enero 2012, 16:25 pm »

Ya lo hice y me salió lo siguiente: (este es otro ejemplo, pero el error al utilizar atof es el mismo que con el código completo, lo hago para ahorrar espacio)
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. main(int argc, char *argv[])
  4. {
  5. double n1, n2, n3;
  6. n1=atof(argv[1]);
  7. n2=atof(argv[2]);
  8. n3=atof(argv[3]);
  9. printf("La variable n1= %f\nLa variable n2= %f\nLa variable n3= %f\n", n1, n2, n3 );
  10. return 0;
  11. }
  12.  
Salida:
Código:

$ ./pam 3 4 5
La variable n1= 524288.000000
La variable n2= 0.000000
La variable n3= 262144.000000
$
Como ven, me cambia los números.
« Última modificación: 15 Enero 2012, 16:39 pm por jhonsc » En línea

“Vive rápido, muere joven y deja un bonito cadáver”
"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."
"Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad."
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Probelma en C. Ayuda!!!
« Respuesta #8 en: 15 Enero 2012, 18:18 pm »

Antes de utilizar una función debes tener acceso a su prototipo y eso se realiza incluyendo el encabezado que corresponda. En el caso de atoi y atof es <stdlib.h>.

Ello porque cuando se llama a una función sin tener acceso al prototipo de esta se asume lo siguiente:

1) El numero de argumentos que recibe esta dado en la llamada.
2) El valor de retorno es int.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
jhonsc

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Re: Probelma en C. Ayuda!!!
« Respuesta #9 en: 15 Enero 2012, 18:26 pm »

Muchísimas gracias de nuevo.
En línea

“Vive rápido, muere joven y deja un bonito cadáver”
"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."
"Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad."
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
probelma con textbox « 1 2 »
Programación Visual Basic
sorcerer 11 3,200 Último mensaje 10 Diciembre 2006, 13:33 pm
por sorcerer
Probelma con AS
Desarrollo Web
Riki_89D 0 1,655 Último mensaje 30 Noviembre 2010, 12:57 pm
por Riki_89D
[Resuelto] sobre un probelma en la web
Desarrollo Web
cotin 4 3,277 Último mensaje 26 Junio 2020, 20:21 pm
por cotin
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines