问题描述
- 一个c语言缓冲区的程序段
-
一个程序段
for(i=0;i<10;i++)
{
printf("%d",i);
//fflush(stdout);
sleep(1);
}
结果有两种:
1 没有有fflush()函数的话10秒后输出0-9
2 有fflush()的话一秒输出一个数字 结果还是0-9
求对两种结果的解释?
解决方案
printf是带缓冲区的,你每循环一次,缓冲区一次;
一直到循环结束,然后是退出程序前,系统自动刷新所有缓冲区;
所以你看到所有的结果一次输出;
//------
不带fflush的,就是每次循环都直接刷新缓冲区,所以你会在每次循环都看到输出;
//------
此外,你还可以把stdout改成stderr测试一下;
stderr是默认刷新缓冲区的,因为错误--刻不容缓;
//-----
希望能帮到你!
解决方案二:
终极回答:
printf() 输出的的条件:(1)缓冲区满;(2)调用fflush()函数。
针对你的情况,不调用fflsuh()时,缓冲区足够大能容纳0-9这10个字符,所以不会输出。直到main函数退出后,由C运行时调用fflush()输出。
调用fflush()时,则直接输出了。
时间: 2024-12-04 18:47:02