任何人都可以解释如何解释以下代码,我真的不明白。
while((c = getchar()) != '\n' && c != EOF);
我知道它用于刷新输入流,并且可以用标准 C 库函数替换它:
fflush(stdin)
任何人都可以解释如何解释以下代码,我真的不明白。
while((c = getchar()) != '\n' && c != EOF);
我知道它用于刷新输入流,并且可以用标准 C 库函数替换它:
fflush(stdin)
while((c = getchar()) != '\n' && c != EOF);
这会读取输入字符,直到它到达行尾(即,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()
丢弃任何已从底层文件获取但尚未被应用程序使用的缓冲数据。
这与将输入丢弃到行尾不同。使用它会使您的代码不可移植。
假设文件(或其他输入)已打开,此代码将继续逐字符获取,直到找到换行符 (\n) 或文件结尾 (eof)。
fflush 只会清除打开文件的流。