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

Error de redundancia con while

Estas en el tema de Error de redundancia con while en el foro de C/C++ en Foros del Web. Hola, estoy aprendiendo un poco de C porque el profesor nos obliga jajaja, el caso es que estoy con el while pero me encuentro un ...
  #1 (permalink)  
Antiguo 19/05/2011, 12:41
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Error de redundancia con while

Hola, estoy aprendiendo un poco de C porque el profesor nos obliga jajaja, el caso es que estoy con el while pero me encuentro un pequeño fallo en la ejecución del bucle y es una instrucción redundante, pongo el código para que lo vean.
La frase explicativa del bucle se imprime dos veces seguidas cada vez, la primera por ser lo primero que lee el bucle y la seguda porque es la respuesta al no cumplimiento de la condición del bucle.

Espero haber sido claro, se que es muy básico pero algo no me cuadra, es un ejercicio y consistia en eso, hasta que no pulses 'a' el bucle sigue, de momento el profesor no ha conseguido aclarme nada, veremos a ver mañana, pero no las tengo todas conmigo, me da que es un poco funcionario de C, sabe como funciona pero no tiene la chispa del que trabaja con él con frecuencia, para resolver ciertas cosillas; o tal vez el enunciado sea errado y no se puede hacer con un while, pero un bucle es un bucle ¿no?

Gracias.


//Vamos a crear un porgrama para que active un juego al pulsar una tecla concreta, la 'a', mientras no se pulse seguirá pidiéndote que pulses dicha tecla.

#include <stdio.h>
#include <stdlib.h>

main()
{
char letra;

printf("Pulse una tecla para comenzar a jugar\n");
printf("El juego termina cuando apriete la tecla 'a'.\n");
scanf("%c",&letra);//Crea el espacio para poder asignar la tecla

while(letra!='a')
{printf("Bienvenido a esta ..., por favor, vuelva a intentarlo.\n");
scanf("%c", &letra);}
printf("Fin del juego\n");
system("PAUSE");
}

PD: El return 0; no lo ha explicado, se lo comenté y me dijo que de momento no, se si os parece bien o mal.
  #2 (permalink)  
Antiguo 19/05/2011, 17:44
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años, 8 meses
Puntos: 24
Respuesta: Error de redundancia con while

El error se debe a que al pulsar la tecla enter, se añade otro caracter (caracter nulo, \n) al buffer. Por lo que mira lo que pasa con el buffer.
[buffer= ]
-pedimos que se inserte letra
<usuario inserta 'b' y pulsa enter>
[buffer= b, \n]
Al haber 2 caracteres en el buffer cada vez que introduces una letra, el bucle while se ejecuta dos veces. La solución, vaciar el buffer antes de pedir letra.

Código C:
Ver original
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <mmsystem.h>
  4. #include <math.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. int main()
  9. {
  10. char letra;
  11.  
  12. printf("Pulse una tecla para comenzar a jugar\n");
  13. printf("El juego termina cuando apriete la tecla 'a'.\n");
  14. scanf("%c",&letra);//Crea el espacio para poder asignar la tecla
  15.  
  16.  
  17. while(letra!='a')
  18. {printf("Bienvenido a esta ..., por favor, vuelva a intentarlo.\n");
  19. fflush(stdin);
  20. scanf("%c", &letra);}
  21. printf("Fin del juego\n");
  22. system("PAUSE");
  23.  
  24. return 0;
  25. }
__________________
Foros Desarrollo de Juegos
  #3 (permalink)  
Antiguo 21/05/2011, 12:11
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Error de redundancia con while

Joder, se me olvidó activar el aviso de respuesta y pensaba que nadie me ayudaba, me iba a ir a la competencia jajaja.

Bueno, pues muchas gracias por la ayuda, desconocía lo de fflush (en general desconozco todo), lo que me raya de aprender a programar es que te piden prácticas con soluciones que aún desconoces, y te tienes que apañar, aunque admito que hasta cierto punto puedes medio intuir por donde pueden ir los tiros, pero sólo medio.
No se, igual es que soy un poco zoquete, en fin, seguiremos practicando.
  #4 (permalink)  
Antiguo 21/05/2011, 12:19
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Error de redundancia con while

Hey, perdona, que se me había olvidado, en tu captura incluyes muchos #includes, ¿supongo que es alguna plantilla que usas por defecto para tus cosicas?

Lo importante es que me funciona y he aprendido a pensar en bufferes y cosas de esas.
  #5 (permalink)  
Antiguo 21/05/2011, 19:41
_Lx
 
Fecha de Ingreso: mayo-2011
Mensajes: 17
Antigüedad: 13 años, 7 meses
Puntos: 11
Busqueda Respuesta: Error de redundancia con while


Para vaciar el buffer de entrada no es recomendable usar "fflush(stdin)", porque esta función espera como parámetro un stream de salida (stdout) así que tiene comportamiento indefinido con streams de entrada (sólo funciona en los días hábiles de 3 a 7pm ^^).

Puedes usar:
Código C:
Ver original
  1. while(getchar()!='\n');
  2. setbuf(stdin, NULL);
... u otras opciones.

PD: "fflush(stdin)" no funciona en Linux.


Nos vemos .
  #6 (permalink)  
Antiguo 23/05/2011, 09:17
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Error de redundancia con while

Muchas gracias, lo tuyo también funciona (POR SUPUESTO QUE FUNCIONA, PERO QUE ESPERABAS!!!, jajaja)
Y buen apunte lo de linux, nunca se sabe cuando se podrá necesitar esa información.

Etiquetas: redundancia
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 05:12.