Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/07/2013, 09:35
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 2 meses
Puntos: 1360
Respuesta: Problema con programa sencillo en C

fflush es para vaciar el buffer de salida que le hayas pasado como parámetro. No hagas esto con stdin ya su comportamiento no esta definido. Ademas ese no es el problema.

Lo que pasa cuando lees los enteros es lo siguiente.

Imagina que introduces los números 1 y 2 esto es como lo ve la computadora "1 2\n". \n es el enter que das para introducir los datos. Asi que tu programa lee el 1 y el 2 tal como se lo pediste, comsume esos caracteres y tu cadena queda. "\n" Ahora lo siguiente que pides es un carácter entonces te devuelve '\n' que es lo que queda. Como ve que no es ninguna de tus opciones se sale del programa.

¿Como resolver esto?
Sencillo, solamente tienes que decirle a scanf que consuma ese carácter de la siguiente manera "\n%c".

Espero haberte ayudado a comprender como funcionan los flujos. Aquí te dejo un código de muestra.

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.     int a,b;
  5.     char eleccion;
  6.  
  7.     printf("Introduce dos números:\n");
  8.     scanf("%d %d", &a, &b);
  9.  
  10.     printf("Introduce el carácter según quieras sumar, restar, dividir o multiplicar:\n");
  11.  
  12.     scanf("\n%c", &eleccion);
  13.     switch(eleccion){
  14.         case '+': printf("La suma es:%d", a+b); break;
  15.         case '-': printf("La resta es: %d", a-b); break;
  16.         case '*': printf("La multiplicación es: %d", a*b); break;
  17.         case '/': printf("La división es: %d", a/b); break;
  18.     }
  19.     printf("\n");
  20.     return 0;
  21. }