Ver Mensaje Individual
  #7 (permalink)  
Antiguo 21/07/2008, 02:05
yackcae
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Problema con este codigo...

Cita:
Iniciado por d4rkzone Ver Mensaje
¿Qué se supone que haga scanf("\n%c", &YesONo); y stdin ?

No lo habia visto y nunca lo eh utilizado
Hace lo que dijo Xinef:
Cita:
Cuando introduces un carácter, en el buffer de entrada se queda el "intro" que has hecho... y el siguiente scanf lo acepta.
La solución? No usar scanf o hacer una prelectura del buffer para vaciarlo.
Te lo explico con más detalle:
cuando el usuario introduce un número tiene que presionar intro, eso ocurre al momento de usar "scanf("%d", &respuesta);" la tecla intro se "queda" en el buffer de entrada, al leer el siguiente carácter con "scanf("%c", &YesONo);" se lee el intro que ya está en el buffer, por lo que la variable YesONo pasa a tener el valor 10 ( YesONo=='\n' ) y el programa falla, la solución es leer el intro del buffer o saltarlo, con "getc(stdin);" lo lees y con "scanf("\n%c", &YesONo);" te lo saltas, pero en ambos casos el resultado es el mismo y el problema se soluciona.

stdin es un apuntador al buffer de entrada de la consola, en principio cualquier función para la lectura de archivos se puede usar con stdin, como getc, fgets, etc. también hay stdout que es un apuntador de salida a la consola y stderr que por lo general también es un apuntador a la consola. Sin embargo, todo esto que he dicho, depende del sistema en el que se esté trabajando ya que estos apuntadores se pueden redirigir a algún otro punto, como a un archivo por ejemplo.