如何手动刷新缓冲区?
How to flush buffer manually?
但没有正确回答。
代码
#include<iostream>
int main()
{
char ch='a';
std::cout<<ch;
}
输出
a
所以输出流中只有一个字符导致缓冲区。所以缓冲区还没有满,它仍然在屏幕上显示输出。表示缓冲区自动刷新。
所以请给出缓冲区不自动刷新的示例,我们必须使用操纵器标志 flush
。
您可以通过在输出之间休眠来查看您的流是否被缓冲,例如:
#include <iostream>
#include <thread>
int main()
{
for (int i = 0; i < 50; i++)
{
char ch = 'a';
std::cout << ch << "\n";
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
}
在某些平台上,您可能需要通过调用 setvbuf
:
在 stdout
上启用缓冲
std::setvbuf(stdout, nullptr, _IOFBF, BUFSIZ);
代码
#include<iostream>
int main()
{
char ch='a';
std::cout<<ch;
}
输出
a
所以输出流中只有一个字符导致缓冲区。所以缓冲区还没有满,它仍然在屏幕上显示输出。表示缓冲区自动刷新。
所以请给出缓冲区不自动刷新的示例,我们必须使用操纵器标志 flush
。
您可以通过在输出之间休眠来查看您的流是否被缓冲,例如:
#include <iostream>
#include <thread>
int main()
{
for (int i = 0; i < 50; i++)
{
char ch = 'a';
std::cout << ch << "\n";
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
}
在某些平台上,您可能需要通过调用 setvbuf
:
stdout
上启用缓冲
std::setvbuf(stdout, nullptr, _IOFBF, BUFSIZ);