我有一个用于学校的小项目我用C ++编写,我们必须考虑到一些错误,并在发生这种情况时退出该程序。基本上,在else语句中,当表达式被计算为false时,就像它不会将错误写入文件一样。如果我将它输出到控制台(通过cout)而不是将其写入文件它可以正常工作,但是当我尝试将其写入输出文件时,它不起作用。基本上,这是我的问题。我的教授要求所有输出都是文件,这就是为什么我不能使用cout。那么为什么它会将它输出到控制台,而不是文件呢?
P.S。我正在输出其他东西到文件,它工作正常,所以对于记录我认为它缩小到else语句中的小块代码。
if(tempUnit == 'C' || tempUnit == 'F')
{
if(tempUnit == 'F')
{
temp = convertTemp(temp, tempUnit);
}
temps[a] = temp;
printTemp(outputFile, tempUnit, temp);
printTimestamp(outputFile, humanDate);
outputFile << endl;
}
else{
// this is where it doesnt work
outputFile << "Error. Incorrect temperature unit, must be " <<
"either a capital C or a capital F. Program ended.";
exit(0);
}
答案 0 :(得分:3)
您需要在退出程序之前刷新缓冲区。
outputFile << "Error. Incorrect temperature unit, must be either a capital C or a capital F. Program ended." << std::flush;
或
outputFile << "Error. Incorrect temperature unit, must be either a capital C or a capital F. Program ended." << std::endl;
答案 1 :(得分:1)
stdout和stderr都被缓冲了。您需要告诉程序刷新输出文件。
如果你在做C,你会的,
fflush(stdout);
//or
fflush(stderr);
由于你正在做C ++,你拼写fflush,endl,
cout << std::endl; // endl does the flushing
请参阅此stackoverflow:endl