在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;
}
如果您inMaster文件中有超過100條客戶記錄,那麼你會寫過去的客戶結束[100]數組,並可能崩潰... –
它只有20條記錄 – user3020474
VS 2012有一個體面的調試器,你可以用它來逐步通過程序,並至少縮小問題的位置。 'while(!inMaster.eof())'不正確。在這裏閱讀更多關於「EOF反模式」:http://stackoverflow.com/questions/5431941和http://drpaulcarter.com/cs/common-c-errors.php#4.2 –