【发布时间】:2017-03-04 15:27:52
【问题描述】:
人们通常会提到
while( getchar() != '\n' )
在清除输入缓冲区或溢出时。
fgetc 或 getc 也可以。例如:
while( fgetc(stdin) != '\n' )
和
while( getc(stdin) != '\n' )
人们总是使用getchar有什么特别的原因吗?
使用fgetc或getc有什么缺点吗?
【问题讨论】:
人们通常会提到
while( getchar() != '\n' )
在清除输入缓冲区或溢出时。
fgetc 或 getc 也可以。例如:
while( fgetc(stdin) != '\n' )
和
while( getc(stdin) != '\n' )
人们总是使用getchar有什么特别的原因吗?
使用fgetc或getc有什么缺点吗?
【问题讨论】:
人们只在从标准输入读取的情况下更喜欢getchar。当需要读取文件时,没有理由不将其替换为 getc/fgetc。
话虽如此,构造是危险的,因为在输入流中没有'\n' 的情况下,它可能导致无限循环。例如,如果最终用户使用 Ctrl+D 或 Ctrl+Z 关闭流,则程序会使用像你这样的while 循环永远不会退出。您需要在忽略输入的循环中检查EOF:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
【讨论】:
stdin,请使用getchar。getc。fgetc。 (对我来说,这些原因非常模糊,我从不调用 fgetc,我建议使用getc。)【讨论】: