我想从文件加载一个多维数组,我有这个代码:
std::vector<std::vector<int>> matrix;
for (int r = 0; r < cols; r++)
{
std::vector<int> row;
for ( int c = 0 ; c < cols ; c++ )
{
int temp;
if ( fin >> temp )
{
std::cout << temp;
row.push_back(temp);
}
}
matrix.push_back(row);
}
Cols变量很好,如果我有3x3数组,嵌套循环被调用9次,所以这可以按预期工作...但是看起来文件不能读取单个整数(fin >> temp
)。 Fin是文件处理程序。怎么了?
文件内容:
0 1 1
0 0 1
1 1 1
整个代码:
std::vector<std::vector<int>> foo()
{
std::string filename;
std::cout << "Filename: ";
std::cin >> filename;
std::vector<std::vector<int> > matrix;
std::ifstream fin(filename);
if(!fin) {
std::cout << "Error";
exit(EXIT_FAILURE);
}
std::string line;
int cols = 0;
if(fin.is_open()){
while(!fin.eof()){
std::getline(fin,line);
cols++;
}
}
for (int r = 0; r < cols; r++)
{
std::vector<int> row;
for ( int c = 0 ; c < cols ; c++ )
{
int temp;
if ( fin >> temp )
{
std::cout << temp; // displays nothing
row.push_back(temp);
}
std::cout << temp; // displays some crap like -84343141
}
matrix.push_back(row);
}
std::cin >> filename; // to stop execution and see the results
return matrix;
}
答案 0 :(得分:2)
您正在对文件进行第一次传递以确定大小,但是在第一次读取文件后您将需要重新打开该文件。否则,文件中没有剩余数据可供阅读。
答案 1 :(得分:0)
尝试添加
fin.seekg (0, is.beg);
在for循环之前。
因为在
std::string line;
int cols = 0;
if(fin.is_open()){
while(!fin.eof()){
std::getline(fin,line);
cols++;
}
}
您将获得eof
和
if ( fin >> temp )
将始终返回false。这就是你需要将位置设置到文件开头的原因。
您也可以替换
while(!fin.eof()){
std::getline(fin,line);
cols++;
}
更容易
while(std::getline(fin,line)) cols++;
答案 2 :(得分:0)
首先读取文件,然后计算行数和列数,然后关闭文件。 然后再次读取文件,现在循环到计算的行和列