程序不会在exit()函数之前打印行?

时间:2014-01-27 19:25:03

标签: c++ iostream fstream

我有一个用于学校的小项目我用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);
    }

2 个答案:

答案 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