我试图让 cout 缓冲区刷新以在操作字符串之前查看它。我试图通过调用两者来刷新缓冲区,std::flush()
但std::cout.flush()
实际上都没有刷新我的输出。
只有一个调用std::endl
成功地为我刷新了缓冲区。
这是我的代码
std::istringstream stm (game.date());
int day, month, year;
char delim = '/';
std::cout << "Date before: " << game.date() << std::flush; // first flush attempt
std::cout.flush(); // second flush attempt doesnt work
//std::cout << std::endl; // if this is executed the buffer will flush
// Split date string into integers for comparison
stm >> month >> delim;
stm >> day >> delim;
stm >> year >> delim;
std::cout << "Date after: " << " | " << month << "/" << day << "/" << year << std::endl;
这是我的输出
日期之后:| 2013 年 1月 31
日之后的日期:| 2012 年 3月 21
日之后的日期:| 2011年 11 月 11
日之后的日期:| 2010年 10 月 1
日之后的日期:| 2012 年 1 月 2 日
因此,您可以看到对 cout 的第一次调用从未刷新,但正如我之前所说,缓冲区将成功地使用 endl 刷新,它本身调用刷新。我目前在运行 Mountain Lion 的主机 macbook pro 上运行带有 VirtualBox 的 Ubuntu 12.04。
在我的刷新调用中我可能做错了什么,或者这可能是系统问题吗?