有人能解释一下下面的代码怎么解释吗,我真的不明白。

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

我知道它用于刷新inputstream,并且可以用标准的C库函数替换它:
fflush(stdin)

最佳答案

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

这将读取输入字符,直到它到达行尾(即getchar()返回'\n)或文件尾或错误条件(即getchar()返回EOF)。
如果stdin正在从键盘读取数据,则在按Enter键之前,它会放弃输入。
如果有输入错误,或者触发文件结束条件(在Unix上,通过键入Ctrl-D两次),则不执行EOF检查可能会给您带来无限循环。
例如,在使用scanf()读取整数之后,这可能很有用。如果您执行scanf("%d", &num);并键入123,它将读取这3位数字(并将值123存储在n中),但之后的所有内容都等待读取。上述行可用于跳过输入行的其余部分。
(另一种可能更好的方法是使用fgets()读取整行并使用sscanf()解析它们)
这不等于fflush(stdin)。A就C标准而言,在输入流上调用fflush具有未定义的行为。
有些实现确实定义了fflush(stdin)的行为。在使用GNU-libc的系统上,例如(大多数Linux系统):
对于输入流,fflush()将丢弃具有
已从基础文件中获取,但尚未被
申请书。
这与在行尾丢弃输入不同。使用它会使代码不可移植。

关于c - 替代C库函数fflush(stdin),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19206368/

10-11 12:51