1

人们通常会提到

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

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

fgetc或者getc也工作。例如:

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

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

人们总是使用 有什么特别的原因getchar吗?

使用fgetcor有什么缺点getc吗?

4

2 回答 2

2

人们只喜欢getchar从标准输入读取的情况。当需要从文件中读取时,没有理由不将其替换为getc/ 。fgetc

'\n'话虽如此,该构造是危险的,因为在输入流中没有的情况下,它可能导致无限循环。例如,如果最终用户使用Ctrl+DCtrl+关闭流,则具有像您这样的循环Z的程序将永远不会退出。while您需要EOF在忽略输入的循环中检查:

int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
于 2016-10-22T11:29:02.627 回答
0
  • 如果您知道您正在阅读stdin,请使用getchar.
  • 如果您正在读取任意文件指针,请使用getc.
  • 如果出于某种晦涩的原因,您需要确保调用的是实际函数而不是宏,请使用fgetc. (对我来说,这些原因非常模糊,我从不调用 fgetc,我建议使用getc.)
于 2016-10-22T14:08:51.923 回答