读取CSV文件时,尝试在字符串数组中插入值时崩溃 我正在这个C++程序上工作,以读取特定格式的CSV文件。上述文件的格式如下:
2015年1月1日;2.6 2015年1月2日;5.7 2015年1月3日;3.1 我创建了一个程序来读取文件,并使用重载运算符>>将值插入到结构中读取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
#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;
}