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

[SOLUCIONADO] Error en sencillo programa en C

Estas en el tema de Error en sencillo programa en C en el foro de C/C++ en Foros del Web. Hola a tod@s, he creado un programa sencillo que tiene un menu con tres opciones, el caso es que cuando le digo a el usuario ...
  #1 (permalink)  
Antiguo 01/11/2013, 07:33
Avatar de alejandcc  
Fecha de Ingreso: diciembre-2011
Ubicación: Plasencia
Mensajes: 54
Antigüedad: 12 años, 4 meses
Puntos: 1
Error en sencillo programa en C

Hola a tod@s, he creado un programa sencillo que tiene un menu con tres opciones, el caso es que cuando le digo a el usuario si quiere continuar me sale nuevamente el menu pero tambien la pregunta de si quiere ejecutar otra vez el programa y no me deja entrar en el menu. Aqui os dejo el codigo. Gracias.

#include <stdio.h>

int main(){

int num1, num2;
char op;

int seguir=1;
while(seguir==1){

printf(" Elige una opcion\n\n");
printf("********************\n");
printf(" 1. Sumar\n");
printf(" 2. Restar\n");
printf(" 3. Salir\n");
printf("********************\n");

scanf("%c", &op);
//suma
if(op=='1'){
printf("introduce un numero\n");
scanf("%d", &num1);
printf("introduce otro numero\n");
scanf("%d", &num2);
printf("%d + %d = %d \n\n", num1, num2, num1+num2);
}
//resta
if(op=='2'){
printf("introduce un numero\n");
scanf("%d", &num1);
printf("introduce otro numero\n\n");
scanf("%d", &num2);
printf("%d - %d = %d \n", num1, num2, num1-num2);
}
//salir
if(op=='3'){
printf("hasta luego\n");
}
//volver a ejecutar el programa??
printf("¿volver a ejecutar el programa?(1.si/0.no)\n");
scanf("%d", &seguir);
}



}
//fin
  #2 (permalink)  
Antiguo 01/11/2013, 10:07
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 12 años, 9 meses
Puntos: 6
Respuesta: Error en sencillo programa en C

Solo deves agregar un fflush para impiar el buffer de la memoria!!

linea -> 18

Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  
  5. int num1, num2;
  6. char op;
  7.  
  8. int seguir=1;
  9. while(seguir==1){
  10.  
  11. printf(" Elige una opcion\n\n");
  12. printf("********************\n");
  13. printf(" 1. Sumar\n");
  14. printf(" 2. Restar\n");
  15. printf(" 3. Salir\n");
  16. printf("********************\n");
  17.  
  18. fflush(stdin);
  19. scanf("%c", &op);
  20. //suma
  21. if(op=='1'){
  22. printf("introduce un numero\n");
  23. scanf("%d", &num1);
  24. printf("introduce otro numero\n");
  25. scanf("%d", &num2);
  26. printf("%d + %d = %d \n\n", num1, num2, num1+num2);
  27. }
  28. //resta
  29. if(op=='2'){
  30. printf("introduce un numero\n");
  31. scanf("%d", &num1);
  32. printf("introduce otro numero\n\n");
  33. scanf("%d", &num2);
  34. printf("%d - %d = %d \n", num1, num2, num1-num2);
  35. }
  36. //salir
  37. if(op=='3'){
  38. printf("hasta luego\n");
  39. }
  40. //volver a ejecutar el programa??
  41. printf("¿volver a ejecutar el programa?(1.si/0.no)\n");
  42. scanf("%d", &seguir);
  43. }
  44.  
  45.  
  46.  
  47. }

Deveria usarlo antes de cada scanf

Suerte y espero funcione
  #3 (permalink)  
Antiguo 01/11/2013, 10:16
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Error en sencillo programa en C

Una nota sobre fflush(stdin), esta es la referencia de la funcion:

Código C:
Ver original
  1. int fflush(FILE *ostream);
  2.  
  3. ostream points to an output stream or an update stream in which the
  4. most recent operation was not input, the fflush function causes any
  5. unwritten data for that stream to be delivered to the host environment to
  6. be written to the file; otherwise, the behavior is undefined.

Eso significa que aunque en determinadas implementaciones la funcion haga lo que se espera, esa funcion no está pensada para trabajar con el FILE* stdin. La alternativa es forzar la lectura de la cola de entrada estandar hasta vaciarla:

Código C:
Ver original
  1. void fflush_stdin() {
  2.     char c;
  3.     while ((c = getchar()) != '\n' && c != EOF);
  4. }
  5.  
  6. //y la ejecutas antes de cada scanf
  7. fflush_stdin();
  8. scanf("lo que sea");

Saludos
vosk
  #4 (permalink)  
Antiguo 03/11/2013, 17:55
Avatar de alejandcc  
Fecha de Ingreso: diciembre-2011
Ubicación: Plasencia
Mensajes: 54
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Error en sencillo programa en C

Gracias por la ayuda, ahora si funciona, era meter la función fflush como bien dices

Etiquetas: int, numero, 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 09:43.