Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problema con programa sencillo en C

Estas en el tema de Problema con programa sencillo en C en el foro de C/C++ en Foros del Web. Buenas! El cometido del programa es que introduciendo un carácter (suma resta..) haga la operación con dos numeros introducidos por teclados. Yo lo he hecho ...
  #1 (permalink)  
Antiguo 12/07/2013, 03:40
 
Fecha de Ingreso: julio-2013
Mensajes: 11
Antigüedad: 10 años, 10 meses
Puntos: 0
Problema con programa sencillo en C

Buenas!

El cometido del programa es que introduciendo un carácter (suma resta..) haga la operación con dos numeros introducidos por teclados.
Yo lo he hecho de la siguiente forma:

Código:
#include <stdio.h>

int main() {
	int a,b;
	char eleccion;
	
	printf("Introduce dos números:\n");
	scanf("%d %d", &a, &b);
	
	printf("Introduce el carácter según quieras sumar, restar, dividir o multiplicar:\n");

	scanf("%c", &eleccion);
		fflush(stdin);
	switch(eleccion){
		case '+': printf("La suma es:%d", a+b); break;
		case '-': printf("La resta es: %d", a-b); break;
		case '*': printf("La multiplicación es: %d", a*b); break;
		case '/': printf("La división es: %d", a/b); break;
	}
	return 0;
}

Pero no hay manera, compila bien, pero falla a la hora de introducir el caracter numérico.

¿Qué puedo hacer?

Muchas gracias!
  #2 (permalink)  
Antiguo 12/07/2013, 07:36
Avatar de LydiaH  
Fecha de Ingreso: julio-2013
Ubicación: Ávila, España
Mensajes: 15
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Problema con programa sencillo en C

Hola, buenas tardes!!
El código está bien lo único que te falla es que el "fflush(stdin)" lo tienes que situar por debajo del primer scanf. Hay gente que no es partidaria de utilizar el fflush(stdin) a mi no me gusta usarlo pero tampoco veo otra solucion. Ah y deberias pones por ejemplo getch(); o system ("pause"); por encima del return 0; para que se realice una pausa y puedas visualizar la solución de la operación que se muestra en pantalla, aunque también depende de donde trabajes, quizás no lo necesitas. El código quedaría así:
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.     fflush (stdin);
  10.     printf("Introduce el carácter según quieras sumar, restar, dividir o multiplicar:\n");
  11.  
  12.     scanf("%c", &eleccion);
  13.        
  14.     switch(eleccion){
  15.         case '+': printf("La suma es:%d", a+b); break;
  16.         case '-': printf("La resta es: %d", a-b); break;
  17.         case '*': printf("La multiplicación es: %d", a*b); break;
  18.         case '/': printf("La división es: %d", a/b); break;
  19.     }
  20.     getch(); //También lo puedes sustituir por un system("pause")
  21.     return 0;
  22. }

Espero que te sirva!

Última edición por LydiaH; 12/07/2013 a las 08:45
  #3 (permalink)  
Antiguo 12/07/2013, 09:35
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
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. }
  #4 (permalink)  
Antiguo 15/07/2013, 14:29
 
Fecha de Ingreso: julio-2013
Mensajes: 11
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Problema con programa sencillo en C

Muchísimas gracias a los dos en serio! =D

Etiquetas: int, numeros, programa, sencillo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:35.