2016-11-25 61 views
0

我正在爲一個類的項目工作,除了變量聲明和函數調用之外,我們的主要內容中除了必須什麼都沒有。ifstream var.fail()函數

通常我檢查通過的代碼在主這些線中/ OUTFILE失敗:

if((inFile.fail()) || (outfile.fail()) 
{ 
    cout << "File I/O Failure"; 
    return 1; 
} 

對於這個項目,但我所有的代碼需要嵌入功能。我有一個功能void openFile(ifstream& fin, ofstream& fout)它設置infileoutfie名稱並打開它們。

問題是如何編寫一個函數來測試失敗並終止失敗的程序,但不關閉程序。

例如:

int file_failure(ifstream& fin, ofstream& fout) 
{ 
    if((fin.fail()) || (fout.fail())) 
    { 
     return 1; 
    } 
    else 
    { 
     // don't return a value. 
    } 
} 

我掛斷或者也許我的誤解是int main()關閉在收到一個int值,這正是我想要的。如果在打開輸入/輸出文件失敗,但我不希望我的file_failure()返回一個int到main並關閉程序,如果I/O很好。

再次,我絕對不能有任何代碼,除了在這個項目的主要var聲明和函數調用。

-Thanks 喬希

+0

定義「終止...,但不關閉程序」。 –

+0

當主返回*時,程序關閉*。當別的東西返回到main時不會。 – immibis

回答

2

我想指出的是,你的發言terminate the program on fail, but not close the program.是矛盾與自身。

到目前爲止,如果我明白你在說什麼,我會爲此使用異常安全。

int file_failure(ifstream& fin, ofstream& fout){ 
    if((fin.fail()) || (fout.fail())) throw std::runtime_error("File I/O Failure"); 
    else 
    { 
     // don't return a value. 
    } 
    return val; // what ever you want to return 
} 

int main(){ 
    try { 
     file_failure(fin, fout); 
    }catch(std::exception& e){ 
     // control reach here if file_failure throw exception 
     std::cout << e.what() << std::endl; 
     exit(1); // the parameter to exit function gives the Exit Status 
        // this exit function terminates your program 
    } 
    return 0; 
} 

有關Exit Status的更多信息,請參見here

+0

謝謝我會研究它,我正在編程的介紹,我們還沒有進入異常,所以嘗試,拋出和捕獲對我來說是陌生的。爲了我自己的利益,我會研究它,但異常處理不能在main中,除了函數調用和var聲明外,主要需要完全空的。我沒有仔細閱讀這個陳述,我的意思是說「如果I/O失敗終止程序,否則繼續) –

+1

@JoshuaGahan在這種情況下,你爲什麼不做'if((fin。失敗())||(fout.fail()))exit(1);'你可以避免異常安全thingy – solti

+0

是的,那麼我會這樣做,謝謝你我不知道exit()只有在返回0時才終止程序,如果發生錯誤則返回1。 –