C++ 无法从.csv解析器获取任何输出
下面的代码应该接受一个文件名,即“example.csv”,并输出一个2D数组C++ 无法从.csv解析器获取任何输出,c++,csv,C++,Csv,下面的代码应该接受一个文件名,即“example.csv”,并输出一个2D数组 typedef vector<vector<double> > matrix; matrix importcsv(string filename) { ifstream myfile (filename); matrix contents {{0.0}}; char parens; double data; int i,j; while(!myfile.eo
typedef vector<vector<double> > matrix;
matrix importcsv(string filename)
{
ifstream myfile (filename);
matrix contents {{0.0}};
char parens; double data; int i,j;
while(!myfile.eof())
{
if(myfile.get()==',')
{
++j;
contents[i].resize(j+1);
myfile >> parens;
}
else if(myfile.get()=='\n')
{
++i;
contents.resize(i+1);
j=0;
contents[i].resize(j+1);
}
else
{
myfile >> data;
contents[i][j]=data;
}
}
return contents;
}
typedef向量矩阵;
矩阵导入SV(字符串文件名)
{
ifstream myfile(文件名);
矩阵内容{0.0};
字符对;双数据;int i,j;
而(!myfile.eof())
{
如果(myfile.get()==',')
{
++j;
内容[i]。调整大小(j+1);
我的文件>>帕伦斯;
}
else if(myfile.get()='\n')
{
++一,;
内容。调整大小(i+1);
j=0;
内容[i]。调整大小(j+1);
}
其他的
{
myfile>>数据;
内容[i][j]=数据;
}
}
返回内容;
}
问题是:编译器运行平稳,但可执行文件不返回任何内容
当我手动写出循环时,即通过使用Ctrl+V手动重复代码,该函数按预期工作。所以错误一定是在“if”或“else if”语法中的某个地方…我想我知道问题出在哪里了。在if语句中,
myfile.get()
实际上读取一个字符,而不仅仅是验证下一个字符是什么
因此,如果下一个字符是新行,第一个if语句将获得它,但将为false,第二个if也将不为true,因为前一个if已经吃掉了新行字符
做一些类似于:
char c = myfile.get();
if(c == ',')
{
++j;
contents[i].resize(j+1);
myfile >> parens;
}
else if(c=='\n')
{
++i;
contents.resize(i+1);
j=0;
contents[i].resize(j+1);
}
else
{
myfile >> data;
contents[i][j]=data;
}
你试过调试它吗?例如添加断点(或“我已经完成了这一步”)来查看代码是否执行?
编译器运行平稳,但可执行文件什么也不返回。
你说的“编译器运行平稳”是什么意思?它应该“运行平稳”,否则就无法生成可执行文件。啊-真知灼见!我一直在努力理解myfile.get()函数的实际功能。cplusplus.com上有一个非常好的文档。我什么都用它。以下是get
函数的文档: