2014-03-12 67 views
0

正被用作输入的文件是包含一个.txt文件:为什么这是一个永无止境的循环?

Line 1 
Line 2 
Line 3 
Line 4 
Line 5 

而且它正在对我的代码3号线开通。然而,while循环从不终止,持续向控制台打印“Pass”,为什么在第5行文本之后没有找到infile.eof()

int main(int argc, char** argv) { 
    ifstream infile; 
    infile.open("TEST.txt", ios::in); 


    if(infile.is_open()){ 
     while(!infile.eof()){ 
      cout << "Pass" << '\n'; 
     } 
    } 
    else{ 
     cout <<"Fail"; 
    } 
} 
+0

即使你会读一些东西,检查'eof'或'bad'不是从'ifstream'中读取的正确方法。 – pmr

回答

6

因为你实际上从infile中消耗(读取)任何东西来推进文件指针。代码只是不断检查EOF,但实际上并不读取文件的任何内容。

+0

如何更改我的代码以使用文件中的数据? –

+0

infile.read()也许? – selbie

+0

感谢您的帮助!绝对是将来要记住的事情。 –

1

正如其他人指出的那样,您不会做任何导致无限循环的infile。至于你如何做到这一点的问题,试试这个:

int main() 
    { 
     ifstream infile("TEST.txt", ios::in); 
     string input; 
     while(infile) 
     { 
      getline(infile, input); 
      <do something with "input"> 
     } 
     return 0; 
    } 
相关问题