在Visual Studios 2012中写了这个C ++代码,这只是作业的第一步。但是,当试图运行它时,我的.exe已停止工作。我不确定为什么会这样,因为我之前使用过该循环。知道为什么会这样吗?
以下是从中读取文件的几行。
AA11 11AA Lee Caleb 1 1.01 2 2.01 3 5.01 01012000 1 01102000 P
ZZ33 33ZZ Wolfe Mitch 5 1.01 1 2.01 0 5.01 03051999 1 01112002 M
WW44 44WW Zeitouni Elie 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;
}
答案 0 :(得分:0)
问题是您在某个时候读取记录时出错。当发生这种情况时,流设置'failbit'以指示它处于错误状态,并且不会执行任何进一步的操作。 eof
测试仍然表明流不在最后,但是当您尝试读取时没有任何事情发生,因为流处于故障状态。所以你继续循环,因为在那之后没有数据从流中读取。
执行输入后,添加如下内容:
if (inMaster.fail()) {
cerr << "Error reading line " << i+1 << endl;
return 1;
}