2013-11-22 150 views
-1

在Visual Studios 2012中編寫了這個C++代碼,這只是分配的第一步。但是,當試圖運行它給我.exe已停止工作。我不確定爲什麼會出現這種情況,因爲我之前使用過這個循環。任何想法爲什麼發生這種情況?如何修復.exe已停止工作?

以下是正在讀取的文件的幾行內容。

AA11 11AA李迦勒1 1.01 2 2.01 3 5.01 01012000 1 01102000 P

ZZ33 33ZZ沃爾夫米奇5 1.01 1 2.01 0 5.01 03051999 1 01112002中號

WW44 44WW Zeitouni埃利10 1.01 5 2.01 10 5.01 05052012 0 05052013 M

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 


struct record 
{ 
    string custID, SPID, custLN, custFN; 
    int Q1; 
    double P1; 
    int Q2; 
    double P2; 
    int Q3; 
    double P3; 
    string LOD; 
    bool shipRec; 
    string NCD, preMethod; 
    double totalSales; 
}; 


istream& operator >> (istream& in, record& r) 
{ 
    in >> r.custID >> r.SPID >> r.custLN >> r.custFN >> r.Q1 >> r.P1 >>r.Q2 >> r.P2 
     >> r.Q3 >> r.P3 >> r.LOD >> r.shipRec >> r.NCD >> r.preMethod; 

    return in; 
} 

int main() 
{ 
    ifstream inMaster; 
    ifstream inTrans; 
    inMaster.open("master.txt"); 
    inTrans.open("trans.txt"); 
    ofstream outNewM; 
    ofstream outErrorL; 
    outNewM.open("NewMaster.txt"); 
    outErrorL.open("errorLog.txt"); 

    record customer[100]; 
    int i=0; 

    while (!inMaster.eof()) 
    { 
     inMaster >> customer[i]; 
     customer[i].totalSales = customer[i].Q1 * customer[i].P1 + customer[i].Q2 * customer[i].P2 + customer[i].Q3 * customer[i].P3; 
     i++; 
    } 

    inMaster.close(); 
    inTrans.close(); 
    outNewM.close(); 
    outErrorL.close(); 
    return 0; 
} 
+2

如果您inMaster文件中有超過100條客戶記錄,那麼你會寫過去的客戶結束[100]數組,並可能崩潰... –

+0

它只有20條記錄 – user3020474

+2

VS 2012有一個體面的調試器,你可以用它來逐步通過程序,並至少縮小問題的位置。 'while(!inMaster.eof())'不正確。在這裏閱讀更多關於「EOF反模式」:http://stackoverflow.com/questions/5431941和http://drpaulcarter.com/cs/common-c-errors.php#4.2 –

回答

0

問題是,您在某個時刻讀取記錄時發生錯誤。當發生這種情況時,流設置'failbit'來表明它處於錯誤狀態,並且不會執行任何進一步的操作。 eof測試仍然指示流不在最後,但是當您嘗試讀取時,由於流處於故障狀態,因此沒有任何反應。所以你繼續循環,因爲在那之後沒有數據正在從流中讀取。

進行輸入後,添加類似:

if (inMaster.fail()) { 
    cerr << "Error reading line " << i+1 << endl; 
    return 1; 
} 
+0

它給我錯誤閱讀第1行。所以它在開始時失敗? – user3020474

+0

@ user3020474:看起來就是這樣。也許你可以在問題中發佈一行或兩個數據。 –