尝试在从CSV文件读取时在字符串数组中插入值时崩溃

时间:2017-11-23 20:46:04

标签: c++ csv

我正在使用这个C ++程序来读取特定格式的csv文件。所述文件的格式如下:

  

2015年1月1日; 2.6

     

2015年2月1日; 5.7

     

2015年3月1日; 3.1

我创建了一个程序来读入文件并使用重载运算符>>将值插入到结构中。

<h1 id="playerName">...</h1> to <h1 id="playerName">jim</h1>

编译代码时不会返回任何错误,但是当它到达行

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

struct data {
    int day, mon, yea;
    double temp;
};

istream& operator >> (istream & input, data & c){
     char poi, sem;
     input >> c.day >> poi >> c.mon >> poi >> c.yea >> sem >> c.temp;
     return input;
}

int getDay(){
    data c;
    return c.day;
}

int getMon(){
     data c;
     return c.mon;
}
double getTemp(){
     data c;
     return c.temp;
}

int readWeather (string fileName, string tempData[31][12]){
    data c;
    stringstream tempStream;

    ifstream weatherFile;

    weatherFile.open(fileName.c_str());

    if (weatherFile.is_open()==false){
        cerr << "Error opening file!" << endl;
    } else {
        cout << "File opened." << endl;
        while (!weatherFile.eof()){
            weatherFile >> c;
            tempStream << getTemp();
            tempData[getDay()-1][getMon()-1]=tempStream.str();
        }
    }
    weatherFile.close();
    cout << "File closed." << endl;
    return c.yea;
}

int main() {
    data c;
    string file;
    string temp[31][12]={""};

    cout << "Input CSV file to be processed." << endl;
    cin >> file;
    string fileDir = "C:\\" + file + ".csv";
    readWeather(fileDir,temp);

    return 0;
}

程序崩溃了。 我的问题是,是否有人知道该特定线路有什么问题?或者我的通用代码可能有问题?

P.S。我对C ++很新,任何其他建议都会非常棒。

1 个答案:

答案 0 :(得分:1)

所有getter函数都返回未初始化的变量。例如:

int getDay(){
   data c;
   return c.day;
}

在此函数中,您声明一个本地对象c,然后从中返回一个永远不会初始化的值。

我建议这是学习如何使用调试器的好时机。在这种情况下,它会很快向您显示出错的地方。