1

任何人都可以解释如何解释以下代码,我真的不明白。

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

我知道它用于刷新输入流,并且可以用标准 C 库函数替换它:

fflush(stdin)
4

2 回答 2

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

这会读取输入字符,直到它到达行尾(即,getchar()返回'\n)或文件结尾或错误条件(即,getchar()返回EOF)。

如果stdin是从键盘读取,它会丢弃输入,直到您按 Enter 键。

EOF如果存在输入错误,或者如果您触发文件结束条件(在 Unix 上,通过键入Ctrl-D两次) ,不进行检查可能会给您一个无限循环。

这可能很有用,例如,在scanf()用于读取整数之后。如果您执行scanf("%d", &num);并键入123,它将读取这 3 位数字(并将值存储在123n),但之后的所有内容都将等待读取。上面的行可用于跳过输入行的其余部分。

(另一种可能更好的选择是使用读取整行fgets()并使用解析它们sscanf()。)

等于fflush(stdin). 就 C 标准而言,调用fflush输入流具有未定义的行为。

一些实现确实定义了fflush(stdin). 例如,在使用 GNU libc 的系统上(大多数 Linux 系统):

对于输入流,fflush()丢弃任何已从底层文件获取但尚未被应用程序使用的缓冲数据。

这与将输入丢弃到行尾不同。使用它会使您的代码不可移植。

于 2013-10-06T07:26:44.817 回答
1

假设文件(或其他输入)已打开,此代码将继续逐字符获取,直到找到换行符 (\n) 或文件结尾 (eof)。

fflush 只会清除打开文件的流。

于 2013-10-06T07:25:18.620 回答