2016-10-22 3 views
1

Les gens mentionnent habituellementRemplacer getchar avec fgetc ou getc dans while (getchar()! = ' N');

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

en matière de compensation du tampon d'entrée ou de débordement.

fgetc ou getc fonctionnent également. Par exemple:

while(fgetc(stdin) != '\n') 

et

while(getc(stdin) != '\n') 

est-il une raison particulière pour laquelle les gens utilisent toujours getchar? Y at-il un inconvénient à utiliser fgetc ou getc?

Répondre

2

Les personnes préfèrent getchar uniquement lorsqu'elles lisent depuis l'entrée standard. Il n'y a aucune raison de ne pas le remplacer par getc/fgetc lorsque la lecture d'un fichier est nécessaire. Cela dit, la construction est dangereuse, car elle peut conduire à une boucle infinie dans les situations où il n'y a pas '\n' dans le flux d'entrée. Par exemple, si l'utilisateur final ferme le flux avec Ctrl +D ou Ctrl +Z, un programme avec une boucle while comme la vôtre ne sera jamais sortie. Vous devez vérifier EOF dans une boucle qui ne tient pas compte d'entrée:

int ch; 
while ((ch = getchar()) != '\n' && ch != EOF); 
0
  • Si vous savez que vous lisez stdin, utilisez getchar. Si vous lisez un pointeur de fichier arbitraire, utilisez getc.
  • Si, pour une raison obscure, vous devez vous assurer que vous appelez une fonction réelle plutôt qu'une macro, utilisez fgetc. (Pour moi, ces raisons sont si obscures que je n'appelle jamais fgetc, et je recommande d'utiliser getc.)