我如何修复.exe已停止工作?

时间:2013-11-22 05:54:27

标签: c++

在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;
}

1 个答案:

答案 0 :(得分:0)

问题是您在某个时候读取记录时出错。当发生这种情况时,流设置'failbit'以指示它处于错误状态,并且不会执行任何进一步的操作。 eof测试仍然表明流不在最后,但是当您尝试读取时没有任何事情发生,因为流处于故障状态。所以你继续循环,因为在那之后没有数据从流中读取。

执行输入后,添加如下内容:

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