我有以下代码,由Visual Studio 2008编译:
int main() {
freopen ("C:\\temp\\stdout.txt","w",stdout);
cout << "aaa" << endl;
while (true) {
string in = "";
getline(cin, in);
cout << "bbb" << endl;
if (in.find("exit") != string::npos) {
break;
}
}
fclose (stdout);
return 0;
}
在Notepad ++中打开“C:\ temp \ stdout.txt”以监控文件更改(通过手动单击文件选项卡进行刷新)。
运行时:
它立即打印“aaa”,这是正确的;
然后我输入“asdf”,但是,“bbb”没有打印或刷新。
然后我输入“asdf”,但是,“bbb”没有打印或刷新。
然后我输入“asdf”,但是,“bbb”没有打印或刷新。
然后我输入“退出”,输出就像:
aaa
bbb
bbb
bbb
bbb
我已经尝试了以下方法进行刷新,但是没有方法可以立即刷新字符串。
cout << "bbb" << endl << flush;
cout << "bbb" << endl;
cout.flush();
答案 0 :(得分:1)
我担心你将C方法与流重定向和C ++混合在一起。 特别是在您的代码中,使用安全:
ofstream fout("stdout.txt");
cout.rdbuf(fout.rdbuf());
将控制台输出重定向到文件。 无需手动刷新流,因为std :: endl操纵器会为您执行此操作。
以下代码可以正常使用:
// *****
#include <iostream> // for I/O
#include <fstream> // for file I/O
using namespace std;
// *****
int main() {
// *****
// freopen("stdout.txt", "w", stdout);
ofstream fout("stdout.txt");
cout.rdbuf(fout.rdbuf());
// *****
cout << "aaa" << endl;
while (true) {
string in = "";
getline(cin, in);
cout << "bbb" << endl;
if (in.find("exit") != string::npos) {
break;
}
}
// *****
// fclose (stdout);
// *****
return 0;
}