无限循环使用!file.eof()作为布尔表达式。文件流读取0而不是达到EOF

时间:2015-11-13 23:11:52

标签: c++ while-loop ifstream eof

我有一个文件,我正在使用ifstream阅读。该文件包含由空格分隔的26个数字,范围从0到25; “21 1 24 16 10 6 14 3 0 18 20 9 4 19 2 25 7 12 5 11 15 17 8 13 23 22”。我正在使用stream :: operator >>将它们传输到我的程序中。

在下面的代码片段中,我陷入无限循环。 在此代码段之前,会发生以下情况:

  1. file用于读取上述文件,并成功到达文件末尾。奇怪的是,文件以相同的方式读入 - 使用while( !file.eof () )并将读取的值存储在int中。
  2. 在此之后,调用file.clear;file.seekg(0);来清除EOF标记并再次将流移至开头。
  3. 然后file ifstream通过引用传递给一个函数,在那里它也被称为file。正是在这个函数中,执行下面的代码片段。

    while( !file.eof() ){                                                                                      
        file >> intFromFile;                                                                                                               
        if( counter < 26 ){                                                       
            contacts[counter] = intFromFile; 
            if( repeatValue( contacts, intFromFile, counter )){                     
                return true;                                
            }
        }                                                                       
    
        if( counter == 26 && file.eof() ){         
            file.close();                                                           
            return false;                  
        }
        counter++;
    }
    
  4. 这里我以无限循环结束,其中counter继续递增,并且 我永远不会到达文件的末尾。如果成功之前相同的框架工作,我不确定这是怎么发生的。永远不会提出eof标志。 虽然,我不确定为什么会这样。

    如果我cout << intFromFile;我按预期打印了文件中的所有数字, “21 1 24 16 10 6 14 3 0 18 20 9 4 19 2 25 7 12 5 11 15 17 8 13 23 22”。但是,在22之后,这是文件中的最后一个数字,循环继续在0中读取,并且永远不会结束。为什么是这样?自上次阅读1中提到的文件(据我所知)没有改变。

    非常感谢任何帮助。

0 个答案:

没有答案