读取CSV文件时,尝试在字符串数组中插入值时崩溃 我正在这个C++程序上工作,以读取特定格式的CSV文件。上述文件的格式如下:

读取CSV文件时,尝试在字符串数组中插入值时崩溃 我正在这个C++程序上工作,以读取特定格式的CSV文件。上述文件的格式如下:,c++,csv,C++,Csv,2015年1月1日;2.6 2015年1月2日;5.7 2015年1月3日;3.1 我创建了一个程序来读取文件,并使用重载运算符>>将值插入到结构中 #include <iostream> #include <string> #include <fstream> #include <iomanip> #include <sstream> using namespace std; struct data { int day, m

2015年1月1日;2.6

2015年1月2日;5.7

2015年1月3日;3.1

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

#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;
}
程序崩溃了。 我的问题是,有人知道这一行有什么问题吗?或者我的通用代码有问题


我对C++是相当新的,任何其他的建议都会非常好。

< P>所有的吸气剂函数都返回未初始化的变量。例如:

int getDay(){
   data c;
   return c.day;
}
在这个函数中,您声明一个本地对象
c
,然后从中返回一个从未初始化过的值


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

我没有初始化它,因为我以为我会从文件中获取它。然而,我确实运行了一个调试器,它给出了一个SIGSEGV错误,结果是有一个“分段错误”。如果我理解正确的话,我做错的是行将数组分配给一个不属于我或不存在的内存空间,cmiiw。
int getDay(){
   data c;
   return c.day;
}