c++ - 从文件加载多维数组

标签 c++

我想从一个文件中加载一个多维数组,我有这段代码:

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;
}

最佳答案

您正在对文件进行第一次遍历以确定大小,但您将需要在第一次读取文件后重新打开该文件。否则,文件中没有剩余数据可供读取。

关于c++ - 从文件加载多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17123084/

相关文章:

c++ - 分层数据的另一个迭代器中是否应该有一个迭代器?

c++ - std::shared_ptr 初始化:make_shared<Foo>() 与 shared_ptr<T>(new Foo)

c++ - 将迭代器存储在临时容器中,然后将它们从其他容器中移除

c++ - ostringstream 在插入输出后为空

C++ 图像比较每个 block 的平均位数

c++ - 获取双击项目的ID

c++ - 鼠标到射线 - 球体碰撞检测

c++ - 用于基准代码运行 K 次的 Unix 命令

c++ - 在 VS2019 或 VSCode 中使用 Unreal Engine 4.24.2 时,如何修复这些错误的 Intellisense 错误?

C++ 性能 : template vs boost. 任何