Tengo el siguiente programa:
int main(int argc, char *argv[])
{
char ch1, ch2;
printf("Input the first character:"); // Line 1
scanf("%c", &ch1);
printf("Input the second character:"); // Line 2
ch2 = getchar();
printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
printf("ch2=%c, ASCII code = %d\n", ch2, ch2);
system("PAUSE");
return 0;
}
Como ha explicado el autor del código anterior: El programa no funcionará correctamente porque en la Línea 1, cuando el usuario presione Enter, dejará en el búfer de entrada 2 el carácter: Enter key (ASCII code 13)
y \n (ASCII code 10)
. Por lo tanto, en la Línea 2, leerá el \n
y no esperará a que el usuario ingrese un carácter.
OK, tengo esto. Pero mi primera pregunta es: ¿Por qué el segundo getchar()
( ch2 = getchar();
) no lee el carácter Enter key (13)
, en lugar de \n
?
A continuación, el autor propuso 2 formas de resolver tales problemas:
utilizar
fflush()
escribe una función como esta:
void clear (void) { while ( getchar() != '\n' ); }
Este código funcionó realmente. ¿Pero no puedo explicarme cómo funciona? Porque en la declaración while, usamos getchar() != '\n'
, eso significa leer cualquier carácter excepto '\n'
? si es así, en el búfer de entrada aún permanece el '\n'
carácter?