2014-01-27 84 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)。 –

相關問題