替代C库函数fflush(stdin)

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

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

我知道它用于刷新输入流,并且可以用标准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) 。 就C标准而言,在输入流上调用fflush具有未定义的行为。

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

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

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

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

fflush将清除流文件以打开文件。