Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;而(getline(file,str))不起作用_C++_File Io_Vector_Getline - Fatal编程技术网

C++ c++;而(getline(file,str))不起作用

C++ c++;而(getline(file,str))不起作用,c++,file-io,vector,getline,C++,File Io,Vector,Getline,我试图从一个文件中读取以填充2d向量(向量的向量) height=count(istreambuf_迭代器(fileToOpen),istreambuf_迭代器(),'\n'); 这会耗尽整个文件。所以在那之后,就没有更多的行可以读了。显然,对getline或任何其他输入函数的调用都会失败 您可以清除流中的错误并将其重置回起始位置,但为什么您首先需要该行呢?使用getline阅读时只需数数行即可。或者在阅读完之后从board.size()获取它(这里我假设board是一个标准的序列容器,并且它

我试图从一个文件中读取以填充2d向量(向量的向量)

height=count(istreambuf_迭代器(fileToOpen),istreambuf_迭代器(),'\n');
这会耗尽整个文件。所以在那之后,就没有更多的行可以读了。显然,对getline或任何其他输入函数的调用都会失败

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

height=count(istreambuf_迭代器(fileToOpen),istreambuf_迭代器(),'\n');
这会耗尽整个文件。所以在那之后,就没有更多的行可以读了。显然,对getline或任何其他输入函数的调用都会失败


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

它位于height=count(…)行之后的eof处

在while(getline)之前添加:


它位于height=count(…)行之后的eof处

在while(getline)之前添加:


使用流迭代器调用
std::count()
后,流中的位置位于末尾。使用
length
height
有什么意义?@0x499602D2这些变量是全局类变量,在方法外部使用。使用流迭代器调用
std::count()
后,流中的位置在末尾。使用
length
height
有什么意义?@0x499602D2这些变量是全局类变量,在方法之外使用。这是我一开始就做的事情,我认为我在开始时需要行数,但最终不需要立即使用,你永远也想不到这是原因,我一开始就这么想,一开始我需要很多行,但后来却不需要了,你永远也想不到,对于文件流来说,这实际上不能保证用任何东西重新填充缓冲区。请注意,对于文件流来说,这实际上不能保证用任何东西重新填充缓冲区。
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();

    }
    while(getline(fileToOpen,str))
    {
        cout<<"inside while\n";
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');
fileToOpen.seekg(0, fileToOpen.beg);