VC++ 循环中的sleep和cout同时用为什么不即使输出?

来源:百度知道 编辑:UC知道 时间:2024/06/18 10:01:26
#include <iostream.h>
#include <windows.h>
void main()
{
int i=1,k=2,j=3;
for (i=1;i<=100;i++)
{
cout<<k;
Sleep(10);
cout<<j;
}
}

输出为什么不是连续输出;而是停顿一会,然后突然冒出很多23232323

因为cout是把字符送到输出缓冲区,而不是直接输出。而缓冲区只有在满或者被清空的情况下输出数据。所以程序直到for循环结束,才一次性输出了缓冲区的所有数据。

可以用stdio.h里的flush()清空缓冲区。如下:

#include <iostream.h>
#include<stdio.h>
#include <windows.h>
void main()
{
int i=1,k=2,j=3;
for (i=1;i<=100;i++)
{
cout<<k;
flush(cout);
Sleep(100);
cout<<j;
flush(cout);
Sleep(100);
}
}

要刷新,不然输出不是同步的。
cout << k;
cout.flush();
或者
ios_base::sync_with_stdio(true);