有人能解释一下下面的代码怎么解释吗,我真的不明白。
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/