2014-03-12 61 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; 
    } 
相關問題