任何人都可以解释如何解释以下代码,我真的不明白。
while((c = getchar()) != '\n' && c != EOF);
我知道它用于刷新输入流并且可以用标准C库函数替换它:
fflush(stdin)
答案 0 :(得分:4)
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)
。就C标准而言,在输入流上调用fflush
具有未定义的行为。
某些实现确实定义了fflush(stdin)
的行为。例如,在使用GNU libc的系统上(大多数Linux系统):
对于输入流,
fflush()
会丢弃所有缓冲数据 已从底层文件中获取,但尚未被使用 申请。
这与丢弃输入到行尾不一样。使用它会使您的代码无法移植。
答案 1 :(得分:1)
假设文件(或其他一些输入)已被打开,此代码将继续按字符逐个获取,直到找到换行符(\ n)或文件结尾(eof)。
fflush只会清除打开文件的流。