duda simple (fflush)

Iniciado por Fabi0lo, 21 Septiembre 2012, 22:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Fabi0lo

Buenas, hace unos pocos días empese con C y me tope con una duda

#include <stdio.h>

int main(){
char ch1, ch2;
printf("Ingrese 1: ");
scanf("%c",&ch1);
printf("Ingrese 2: ");
fflush(stdin);
scanf("%c",&ch2);
printf("%c %c\n", ch1, ch2);

return 0;
}
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?

avesudra

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:

#include <stdio.h>

int main(){
char ch1, ch2;
printf("Ingrese 1: ");
ch1 = getchar();
printf("Ingrese 2: ");
ch2 = getchar();
printf("%c %c\n", ch1, ch2);

return 0;
}


¡Un saludo!
Regístrate en

Fabi0lo

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) 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? 

durasno

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:
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)
Ahorrate una pregunta, lee el man

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón