Ayuda en C

Iniciado por jhonsc, 9 Septiembre 2011, 17:02 PM

0 Miembros y 1 Visitante están viendo este tema.

jhonsc

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:

//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.
"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."

LearningSpanishProgrammer

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.
Estoy aprendiendo español, y tu estas aprendiendo programación

jhonsc

Como puedo ponerlo pues porfavor?¿ (un ejemplo de código de agradecería)  ;D
"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."

satu

#3
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

#include <stdio.h>

int main()
{
   int a, b, r;
   char o;

   printf ("Que operacion desea realizar?:\n\t x = multiplicar\n\t / = dividir\n\t + = sumar\n\t - = restar\n");
   scanf("%c",&o);
   if (o == 'x')
       {
       printf ("Ha elegido multiplicar. Escriba el primer numero:\n");
       scanf("%d",&a);
       printf ("Escriba el segundo numero:\n");
       scanf("%d",&b);
       r=a*b;
       printf ("El resultado de la operacion es:%d\n",r);
       }

   return 0;
}


Saludos
Breakbeat como forma de vida

jhonsc

Gracias por lo de los fallos; y solo una cosa. A mí el scanf me ha funcionado sin incluir la biblioteca, por que¿?¿
"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."

satu

Hola

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

Saludos
Breakbeat como forma de vida

jhonsc

No uso un IDE, si no el compilador GCC en ubuntu>>
"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

Si estas utilizando gcc deberías llamarlo mediante la linea de comandos:
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
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

#8
ok, gracias  :D
"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."