任何人都可以解释如何解释以下代码,我真的不明白。
while((c = getchar()) != '\n' && c != EOF);
Run Code Online (Sandbox Code Playgroud)
我知道它用于刷新输入流,并且可以用标准 C 库函数替换它:
fflush(stdin)
Run Code Online (Sandbox Code Playgroud)
while((c = getchar()) != '\n' && c != EOF);
Run Code Online (Sandbox Code Playgroud)
这会读取输入字符,直到它到达行尾(即,getchar()返回'\n)或文件结尾或错误条件(即,getchar()返回EOF)。
如果stdin正在从键盘读取,它会放弃输入,直到您按 Enter。
EOF如果出现输入错误或触发文件结束条件(在 Unix 上,通过键入Ctrl-D两次),则不进行检查可能会给您带来无限循环。
这可能很有用,例如,在scanf()用于读取整数之后。如果您执行scanf("%d", &num);并键入123,它将读取这 3 位数字(并将值存储在123中n),但之后的所有内容都将等待读取。上面的行可用于跳过输入行的其余部分。
(另一种可能更好的替代方法是使用 读取整行fgets()并使用解析它们sscanf()。)
这不等同于fflush(stdin). 就 C 标准而言,调用fflush输入流具有未定义的行为。
一些实现确实定义了fflush(stdin). 例如,在使用 GNU libc 的系统上(大多数 Linux 系统):
对于输入流,
fflush()丢弃已从底层文件中提取但尚未被应用程序使用的任何缓冲数据。
这与丢弃直到行尾的输入不同。使用它会使您的代码不可移植。