【发布时间】:2013-10-20 22:57:36
【问题描述】:
我试图在操作字符串之前刷新 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 刷新,它调用了 flush 本身。我目前在运行 Mountain Lion 的主机 macbook pro 上运行带有 VirtualBox 的 Ubuntu 12.04。
在我的刷新调用中我可能做错了什么还是这可能是系统问题?
【问题讨论】:
-
我发现了一个rather big X/Y problem。您如何确定刷新不起作用?
-
关于XY问题的Y部分,看这里How to parse and validate a date in std::string in C++?,例如
-
尝试制作 SSCCE (meta.stackexchange.com/questions/22754/…)。这可能会帮助您自己解决问题。