C/Visual C - Problema con un bucle!!!! muy urgente gracias!!!

 
Vista:

Problema con un bucle!!!! muy urgente gracias!!!

Publicado por Galois (1 intervención) el 28/12/2009 17:10:32
#include <stdio.h>
#include <stdlib.h>
int num1;
int num2;
int total;
int resultado;
char opcion;
char J;
int main()
{
do {
printf("introduce opcion\n");
scanf("%c",&opcion);
if(opcion=='J')
{ num1=rand()%5;
num2=rand()%5;
resultado=num1+num2;
printf("introduce el resultado\n");
scanf("%d",&total);

}

if (opcion=='S') printf("hasta luego");

}while(opcion!='S');

system("pause");
return 0;
}

Este es el codigo, quiero que me salga la el menu Introduce opcion (J jugar, S salir)
y si elijo la opcion J jugar, pues despues de jugar, me vuelva a salir de nuevo el menú hasta que elija Salir y salgo del programa
El problema que tengo es que cuando juego y vuelve al menú, me escribe dos veces la frase Introduce opcion y no se porque!
creo q es algun problema que da con la comparacion de la variable opcion con 'J' y 'S', pero no logro saber por que!!!
por favor ayudarme, q me es muy urgente poder resolver, q fallo da!!!!
gracias por adelantado!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con un bucle!!!! muy urgente gracias!!

Publicado por xae (5 intervenciones) el 29/12/2009 00:12:52
Tu problema esta en la sentencia 'scanf("%d",&total); ', ya que cuando scanf interpreta el buffer de entrada deja en el mismo el primer valor que no se ajusta al formato pedido, en este caso un retorno de carro que se introdujo por teclado para validar la entrada, en la siguiente iteración del bucle la función scanf que lee un char encuentra el retorno de carro en el buffer y lo toma como el valor de entrada, provocando una nueva iteración.

La solución, limpiar el buffer de entrada, la forma más simple que se me ocurre es modificar la sentencia 'scanf("%d",&total); ' por,

scanf("%d",&total);
getchar();

de esta forma se vacía el buffer que el scanf anterior no vacío.

Hay soluciones más sofisticadas que básicamente verificarian antes del primer scanf que el buffer de entrada está vacio, vaciandolo sino es el caso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un bucle!!!! muy urgente gracias!!

Publicado por joriel (19 intervenciones) el 29/12/2009 02:10:21
sOLO INCLUYES UN GETCHAR EN EL CODIGO

#include <stdio.h>
#include <stdlib.h>
int num1;
int num2;
int total;
int resultado;
char opcion;
char J;
int main()
{
do {
printf("introduce opcion\n");
scanf("%c",&opcion);
if(opcion=='J')
{ num1=rand()%5;
num2=rand()%5;
resultado=num1+num2;
printf("introduce el resultado\n");
scanf("%d",&total);

}

if (opcion=='S') printf("hasta luego");
getchar();
}while(opcion!='S');

system("pause");
return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un bucle!!!! muy urgente gracias!!

Publicado por OrangeTT (3 intervenciones) el 25/01/2010 14:24:34
Siempre que uses scanf la siguiente sentencia deberia ser fflush(stdin) para limpiar el buffer de lectura..

eso solucionara muchos problemas futuros, aparte de realizar correctamente las lecturas por teclado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar