用fgetc或getc替换getchar(getchar()!='\ n');

时间:2016-10-22 11:23:46

标签: c getchar fgetc getc

人们通常会提到

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

清除输入缓冲区或溢出时。

fgetcgetc也有效。例如:

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

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

人们总是使用getchar是否有任何特殊原因?

使用fgetcgetc是否有任何不利之处?

2 个答案:

答案 0 :(得分:2)

人们在仅从标准输入读取的情况下更喜欢getchar。当需要从文件中读取时,没有理由不用getc / fgetc替换它。

如上所述,构造是危险的,因为在输入流中没有'\n'的情况下,它会导致无限循环。例如,如果最终用户使用 Ctrl + D Ctrl + Z 关闭流,则使用像你这样的while循环永远不会退出。您需要在忽略输入的循环中检查EOF

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

答案 1 :(得分:0)

  • 如果您知道自己正在阅读stdin,请使用getchar
  • 如果您正在读取任意文件指针,请使用getc
  • 如果由于某些不明原因需要确保您正在调用实际函数而不是宏,请使用fgetc。 (对我来说,这些原因是如此模糊,以至于我从不打电话给fgetc,我建议使用getc。)