1

Usualmente limpio el búfer de stdin con este código:

while(getchar() != '\n');

Pero la mayoría me dicen que es más recomendable hacerlo así:

while((ch = getchar()) != '\n' && ch != EOF);

¿Por qué agregan el ch != EOF? Eso es lo que no logro entender. ¿Qué consecuencias traería la forma como la hago yo?

MrDave1999
  • 7,491
  • 1
  • 7
  • 22

1 Answers1

5

Utilizar el segundo, hace mas practica la validación ya que a parte de verificar si es un salto de linea, también verifica que sea un End Of File (EOF) para salir del ciclo.

En pocas palabras el código básicamente omite todos los caracteres hasta la próxima nueva línea.

Por lo tanto es recomendable usar la segunda

while((ch = getchar()) != '\n' && ch != EOF);
TheVicShow
  • 1,077
  • 1
  • 5
  • 17
  • No entiendo. ¿Y si solo quiero que el programa siga hasta el final de la linea?. ¿Por que usar EOF?. @TheVicShow – Daniel Briceño Feb 12 '21 at 03:13
  • 1
    @DanielBriceño Lo puedes hacer y funcionará. El problema es que si en el búfer del teclado hay un `EOF`, esto generaría un bucle infinito. Por ejemplo, intenta ingresar el caracter `EOF` desde la consola con `CTRL + Z` (para windows) y te darás cuenta del bucle infinito. – MrDave1999 Apr 29 '21 at 20:16
  • Buena respuesta. – Daniel Briceño Apr 30 '21 at 01:24