2014-01-27 44 views
0

我有一个用C++编写的学校项目,我们必须解决一些错误,并在出现错误时退出程序。基本上,在else语句中,当表达式评估为false时,就像它不会向文件写入错误。如果我输出到控制台(通过cout),而不是写入文件它工作得很好,但是当我尝试写入输出文件时,它不起作用。基本上,这是我的问题。我的教授要求所有输出到文件中,这就是为什么我不能使用cout。那为什么它会把它输出到控制台,而不是文件?程序不会在exit()函数之前打印行吗?

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); 
    } 
+3

尝试刷新文件在退出'outputFile << std :: flush;' – Erbureth

回答

2

您需要在退出程序之前刷新缓冲区。

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; 
+0

工作完美。我会尽快接受答案。只是好奇,你从哪里学到的?我想了解一些像C++开发人员需要知道的奇怪事情。就这样,我不必每次遇到像这样的小事情都要问一个堆栈溢出问题。 –

+0

@EricDiviney当谈到输出流时,这是C++入门应该涵盖的内容。 'std :: cout'和'std :: ofstream'(和其他)被缓冲。如果你太快地退出程序,缓冲区中的数据将不会被推送到输出 - 所以你必须在关闭程序之前强制它。 –

+0

非常感谢您快速准确的答复。绝对感谢您的帮助! –

1

两个输出和错误被缓冲。你需要告诉你的程序刷新你的输出文件。

如果你在做C,你会的,

fflush(stdout); 
//or 
fflush(stderr); 

既然你是做C++,你拼fflush,ENDL,

cout << std::endl; // endl does the flushing 

看到这个计算器:endl

+0

你也可以将'fflush'拼写为['std :: flush'](http://en.cppreference.com/w/cpp/io/manip/flush)。 –

相关问题