c++ while(getline(文件,str))不起作用

标签 c++ file-io vector getline

我正在尝试从文件中读取以填充二维 vector ( vector 的 vector )。

void readFromFile()
    {
        string str;
        ifstream fileToOpen("test.txt");
        if (fileToOpen.is_open())
        {
            resetBoard();
            height=count(istreambuf_iterator<char>(fileToOpen),istreambuf_iterator<char>(), '\n');
            length=height*2-1;
            cout<<board.size()<<endl;
            while(getline(fileToOpen,str))
            {
                cout<<"inside while\n";
                stringstream ss(str);
                int i;
                vector<short unsigned> line;
                while (ss>>i)
                {
                    line.push_back(i);
                }
                board.push_back(line);
            }
            fileToOpen.close();
            //board.shrink_to_fit();
        }
        else
            cout<<"Unable to open file!\n";
        print();

    }

您可以忽略大部分与实际文件打开和读/写 vector 无关的代码。问题是第一个 while 循环似乎没有执行

    while(getline(fileToOpen,str))
    {
        cout<<"inside while\n";

cout 语句永远不会触发,我只是想不通为什么会这样,我尝试使用全新的 vector ,而不是使用我在类里面使用的 vector 、不同的打印方法等等,直到我发现它从未真正实现那个点

我的文本文件

0000000000000001000000000000000
0000000000000011100000000000000
0000000000000110010000000000000
0000000000001101111000000000000
0000000000011001000100000000000
0000000000110111101110000000000
0000000001100100001001000000000
0000000011011110011111100000000
0000000110010001110000010000000
0000001101111011001000111000000
0000011001000010111101100100000
0000110111100110100001011110000
0001100100011100110011010001000
0011011110110011101110011011100
0110010000101110001001110010010
1101111001101001011111001111111

最佳答案

height=count(istreambuf_iterator<char>(fileToOpen),istreambuf_iterator<char>(), '\n');

这会耗尽整个文件。所以在那之后,就没有更多的行可读了。很明显,对 getline 或任何其他输入函数的调用将失败。

您可以清除流中的错误并将其重置回开头,但为什么您一开始就需要该行?只需在使用 getline 读取它们时计算行数。或者在阅读完后从 board.size() 获取它(这里我假设 board 是一个标准的序列容器,并且它事先是空的)。

关于c++ while(getline(文件,str))不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26640344/

相关文章:

c++ - 我如何使用 C++ 和 boost 创建看门狗定时器

C++将CSV之类的数据保存在更大的文件中

c++ - 缓慢的纹理加载

c++ - 无法使用 InFile 将文件正确读入结构成员

sql - 如何使用 sql 写入或附加到文本文件?

c++ - 读取整数文件并将每一行存储在一个单独的数组中

c++ - 将 vector <vector<int>>作为平面数组访问

c++ - 在 AIX 上使用 pthread 进行静态链接

c - 在C中输入数组

c++ - 在 C++ 中使用重载 * 运算符与括号结果相乘