我有一个文件,我正在使用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 >>
将它们传输到我的程序中。
在下面的代码片段中,我陷入无限循环。 在此代码段之前,会发生以下情况:
file
用于读取上述文件,并成功到达文件末尾。奇怪的是,文件以相同的方式读入 - 使用while( !file.eof () )
并将读取的值存储在int
中。file.clear;
和file.seekg(0);
来清除EOF
标记并再次将流移至开头。然后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++;
}
这里我以无限循环结束,其中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中提到的文件(据我所知)没有改变。
非常感谢任何帮助。