C语言清空(刷新)缓冲区,从根本上消除那些奇怪的行为
在C语言中,我们可以使用以下方法来清空(刷新)缓冲区:
刷新输出缓冲区:
- 使用
fflush(stdout)
函数来刷新标准输出缓冲区。 - 使用
fflush(NULL)
函数来刷新所有的输出流。
- 使用
清空输入缓冲区:
- 使用
fflush(stdin)
函数来清空标准输入缓冲区。注意:这种方法在标准C中是未定义的行为,因此不建议使用。
- 使用
使用循环读取输入直到换行符:
- 使用
getchar()
函数来读取输入缓冲区中的每个字符,直到遇到换行符\n
。
- 使用
下面是一个示例代码,演示如何清空缓冲区:
#include <stdio.h>
int main() {
int c;
// 刷新输出缓冲区
fflush(stdout);
// 清空输入缓冲区
fflush(stdin); // 注意:这种方法在标准C中是未定义的行为
// 或者使用循环读取输入直到换行符
while ((c = getchar()) != '\n' && c != EOF);
return 0;
}
请注意,使用fflush(stdin)
来清空输入缓冲区在标准C中是未定义的行为,并且在某些编译器中可能会产生不同的结果。因此,建议使用循环读取输入直到换行符的方法来清空输入缓冲区,以确保可移植性和正确性。