Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jhonsc en 9 Septiembre 2011, 17:02 pm



Título: Ayuda en C
Publicado por: jhonsc en 9 Septiembre 2011, 17:02 pm
Estoy empezando en C y necesito ayuda. Estoy haciendo un programa que me pida una operación y segun la operación que escoja, haga esa operación con dos numeros que me pide. Este es el código:
Código:
//Este es mi tercer programa echo en C
main()
{
int o, a, b, r;
printf ("¿Que operación desea realizar?: (x = multiplicar; / = dividir; + = sumar; - = restar)\n");
scanf("%d",&o);
if (o= "x")
printf ("Ha elegido multiplicar. Escriba el primer número:\n");
scanf("%d",&a);
printf ("Escriba el segundo número:\n");
scanf("%d",&b);
r=a*b;
printf ("El resultado de la operación es:%d\n",r);
}
El problema es que luego, cuando lo ejecuto me sale lo siguiente:
¿Que operación desea realizar?: (x = multiplicar; / = dividir; + = sumar; - = restar)
x
Ha elegido multiplicar. Escriba el primer número:
Escriba el segundo número:
El resultado de la operación es:-2064563936
-----Como ven me pregunta que que operación deseo realizar, y yo le contesto x, pero apartir de aí, todo me sale automático, y no me pregunta numeros>>y encima sale ese numero como reultado.
Utilizo GCC en Ubuntu.


Título: Re: Ayuda en C
Publicado por: LearningSpanishProgrammer en 9 Septiembre 2011, 17:37 pm
Cuando escribe scanf(%d", &o) estas hacendo lecture de n dígitos (a partir de lo primer dígitos)

"31093aafeofae[enter]" va a leer 31093, pero el 'aafeofae[enter]' continuará em el 'standard input' (la entrada estándar)

Em su caso, lo [enter] es lido en el segundo 'scanf' porque permanece en la entrada estándar. Una opción es 'scanf("%d\n", &o)' otra es leer una cadena después de leer lo entero.


Título: Re: Ayuda en C
Publicado por: jhonsc en 9 Septiembre 2011, 17:48 pm
Como puedo ponerlo pues porfavor?¿ (un ejemplo de código de agradecería)  ;D


Título: Re: Ayuda en C
Publicado por: satu en 9 Septiembre 2011, 17:48 pm
Hola

Tienes muchos fallos:
-Te faltan los #include, en este caso sólo haría falta <stdio.h>
-main debe devolver un int, por tanto la declaración debe ser "int main" con el return al final
-Para leer una letra mejor utiliza una variable tipo char
-Las comparaciones se hacen con "==" no con "="
-Para comparar número no hacen falta comillas "x"
-Todo lo que quieras que esté dentro del if debe ir entre llaves { }

No sé si faltará algo

Aquí tienes un ejemplo
Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int a, b, r;
  6.    char o;
  7.  
  8.    printf ("Que operacion desea realizar?:\n\t x = multiplicar\n\t / = dividir\n\t + = sumar\n\t - = restar\n");
  9.    scanf("%c",&o);
  10.    if (o == 'x')
  11.        {
  12.        printf ("Ha elegido multiplicar. Escriba el primer numero:\n");
  13.        scanf("%d",&a);
  14.        printf ("Escriba el segundo numero:\n");
  15.        scanf("%d",&b);
  16.        r=a*b;
  17.        printf ("El resultado de la operacion es:%d\n",r);
  18.        }
  19.  
  20.    return 0;
  21. }
  22.  

Saludos


Título: Re: Ayuda en C
Publicado por: jhonsc en 9 Septiembre 2011, 18:05 pm
Gracias por lo de los fallos; y solo una cosa. A mí el scanf me ha funcionado sin incluir la biblioteca, por que¿?¿


Título: Re: Ayuda en C
Publicado por: satu en 9 Septiembre 2011, 19:26 pm
Hola

Pues seguramente porque usas un IDE como borland o Dev-C++, verdad??

Saludos


Título: Re: Ayuda en C
Publicado por: jhonsc en 9 Septiembre 2011, 23:20 pm
No uso un IDE, si no el compilador GCC en ubuntu>>


Título: Re: Ayuda en C
Publicado por: rir3760 en 10 Septiembre 2011, 02:50 am
Si estas utilizando gcc deberías llamarlo mediante la linea de comandos:
Código:
gcc -c -ansi -pedantic -Wall -O entrada -o salida
Donde "entrada" es el archivo de código fuente y "salida" es el nombre de la aplicación resultante. Si lo haces así el compilador se ejecutara en su modo mas estricto y esa es la forma mas fácil de detectar (una buena parte de) los errores en el programa.

En tu caso las llamadas a scanf sin incluir el encabezado <stdio.h>" funciona" ya que todas las llamadas son similares pero si existieran variaciones se generaría "comportamiento no definido", en español cualquier cosa puede pasar desde el programa funcionando correctamente hasta el (usual) el programa reventando.

Un saludo


Título: Re: Ayuda en C
Publicado por: jhonsc en 10 Septiembre 2011, 14:09 pm
ok, gracias  :D