Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Fabi0lo en 21 Septiembre 2012, 22:22 pm



Título: duda simple (fflush)
Publicado por: Fabi0lo en 21 Septiembre 2012, 22:22 pm
Buenas, hace unos pocos días empese con C y me tope con una duda

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. char ch1, ch2;
  5. printf("Ingrese 1: ");
  6. scanf("%c",&ch1);
  7. printf("Ingrese 2: ");
  8. fflush(stdin);
  9. scanf("%c",&ch2);
  10. printf("%c %c\n", ch1, ch2);
  11.  
  12. return 0;
  13. }
Pero lo que resulta es q al ingresar el primer carácter ch1, automáticamente se salta el 2º scanf con exactamente el mismo carácter q introduje en el 1º scanf.

Se supone que eso debería solucionarse con fflush, pero es exactamente el mismo resultado. No le puse luego antes del 1º scanf, puesto q se supone q el buffer de entrada debería estar limpia, aun poniéndole es lo mismo

Alguien me podría decir en q estoy fallando?


Título: Re: duda simple (fflush)
Publicado por: avesudra en 22 Septiembre 2012, 00:04 am
Buenas , esto debe ir en el subforo de C/C++ , en cuanto a la pregunta , la función fflush no está definida para limpiar un estándar de entrada(stdin) si no para un estandar de salida(stdout). De todas maneras te podría decir que usaras fgets + sscanf como dijo en su día un moderador del subforo de C/C++ , aunque para esto lo mejor  es usar la función getchar ya que solo estás cogiendo un carácter, lo otro sería para cadenas, bueno aquí te dejo lo del getchar que decía:
Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. char ch1, ch2;
  5. printf("Ingrese 1: ");
  6. ch1 = getchar();
  7. printf("Ingrese 2: ");
  8. ch2 = getchar();
  9. printf("%c %c\n", ch1, ch2);
  10.  
  11. return 0;
  12. }
  13.  

¡Un saludo!


Título: Re: duda simple (fflush)
Publicado por: Fabi0lo en 22 Septiembre 2012, 02:45 am
ammm... y no lo postié ahí, ups.

Gracias, desconocía de getchar.

No entendí a que te refieres con fflush. He leído en un par de lugares, pero siempre encuentro 2 grupos de personas que se oponen. Siempre hay un grupito q dice q se usa fflush(stdin) para el buffer de entrada cuando se use el scanf e incluso tutoriales lo mencionan (como este: http://www.carlospes.com/curso_de_lenguaje_c/01_11_la_funcion_fflush.php (http://www.carlospes.com/curso_de_lenguaje_c/01_11_la_funcion_fflush.php)) y otro grupo dice q fflush no se puede usar la entrada stdin, q solo se puede usar para la salida ¿acaso la palabra reservada stdin alguien la invento a lo loco? no entiendo nada, alguien q sepa del tema me lo puede explicar?

Existe el stdin? Porq hay personas q dicen q se usa antes de usar el teclado y otras personas dicen q no se tiene q  usar nunca? 


Título: Re: duda simple (fflush)
Publicado por: durasno en 25 Septiembre 2012, 01:46 am
Hola! yo creo q la discusion se da nada mas porque la gente que lo usa le funciona y le es comodo(tambien depende bajo que entorno programan), pero la otra parte a la que le gusta leer el manual de la funcion entiende claramente que el comportamiento de fflush no esta definido para stdin.
 
Para evitar discusiones usa este bucle para limpiar el bufer:
Código
  1. while((ch = getchar()) != '\n' && ch != EOF);

Saludos

PD: stdin es un flujo asociado al teclado(cuando veas archivos se te va a ser mas familiar)


Título: Re: duda simple (fflush)
Publicado por: Eternal Idol en 29 Septiembre 2012, 10:15 am
http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html