以下代码应该采用文件名,即“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.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;
}
问题:编译器运行顺利,但可执行文件没有返回任何内容。
当我手动写出循环时,即通过Ctrl + V手动重复代码时,该函数按预期工作。所以错误必须在'if'或'else if'语法中的某处...
答案 0 :(得分:2)
我想我知道问题所在。在你的if语句中,myfile.get()
实际上读取了一个字符,而不只是验证下一个字符是什么。
因此,如果下一个字符是新行,则第一个if语句将获取它,但是将为false,第二个if也将不为true,因为前一个如果已经使用了新行字符。
做类似的事情:
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;
}