使用stof引发异常-C ++

所以我有一个程序来打开一个csv文件并对其执行很多操作。现在,我需要对其进行更改,以便打开一个文本文件,该文件列出了我要在其中使用的文件的名称,然后循环执行相同的操作,直到对所有这些文件都执行了操作,而不是像以前那样只对一个文件进行了操作。我很困惑,因为我看不到这段代码片段有什么问题,因为以前从单个文件中读取代码时,它工作得很好。

在继续逐行读取文件的其余部分之前,我舍弃了每个csv文件的第一行以将它们存储为列标题。我的程序在到达此行时崩溃:

getline(datafile, unusedline, '\n');

与错误

terminate called after throwing an instance of 'std::invalid argument' what(): stof

我假设它在这里崩溃,因为ive添加了cout语句向我显示程序在哪里停止运行以及它在哪里崩溃。我有很多代码,因此请尽量不要让它可读

ifstream infile("data\\met_index.txt"); //Open the text file thats lists the csv files needed

    if(!infile) //Exits the program and outputs this message if the file is not found
    {

        cout << "File not found.";

        return -1;

    }

    Vector<string> headers;

    while(getline(infile, files))
    {

        ifstream datafile(files.c_str());
        if(!datafile) //Exits the program and outputs this message if the file is not found
        {

            cout << "File not found.";

            return -1;

        }
        cout << "File: " << files << endl;

        cout << "Reached here so far: " << endl;

        string unusedline;
        string line;
        string token2;
        getline(datafile, unusedline, '\n');
        cout << "Testing for the first line: " << unusedline << endl;
        stringstream headers2(unusedline);
        cout << "Testing for crash" << endl;
        //This is where it crashes, after printing the above statement
        while(getline(headers2, token2, ','))
        {
            for(int x = 0; x < headers.vecsize(); x++){
            headers.add(token2);
            cout << headers[x] << endl;
            }


        }
评论
O老男人
O老男人

Since your posted code includes no calls to stof, I assume that the crash is actually in headers.add(token2);. If stof throws an invalid_argument exception it means that it has been given something which cannot be converted into a floating point number.

换句话说,问题似乎出在您的数据而不是您的代码上。也许代码与数据不匹配。

点赞
评论