2011-11-01 94 views
0

我從一個網站獲得了C++文件讀取器的代碼,但我似乎無法讓它爲我工作,是否有代碼有問題,或者我應該使用別的東西來閱讀文本表單一個文本文件?C++文件讀取器給出錯誤

我得到的錯誤是:

E:\ IT-C++ \ snake.cpp ||在函數 '廉政的main()':| E:\ IT-C++ \ snake.cpp | 11 | error:無法將'infile.std :: basic_ios < _CharT,_Traits> :: eof [with _CharT = char,_Traits = std :: char_traits]'轉換爲'布爾「| E:\ IT-C++ \ snake.cpp | 11 |錯誤:在一元參數中! || ===構建完成:2個錯誤,0個警告=== |

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() 
{ 
     string STRING; 
    ifstream infile; 
    infile.open ("names.txt"); 
     while(!infile.eof) // To get you all the lines. 
     { 
      getline(infile,STRING); // Saves the line in STRING. 
      cout<<STRING; // Prints our STRING. 
     } 
    infile.close(); 

} 
+0

無論你發現那個網站,遠離它。在讀取之前檢查'eof()'是一個錯誤。 –

回答

1

標準線由行文件讀取成語是這樣的:

std::string line; 
std::ifstream infile("names.txt"); 

while (std::getline(infile, line)) 
{ 
    std::cout << "We read: " << line << std::endl; 
} 

無需顯式地關閉文件,當infile超出範圍即會自動完成。請注意,我們從不說eof,因爲那不符合你的要求!

1
while(!infile.eof()) 
       // ^^ missed. It's a member function of input output stream 

你應該取決於打開文件即成員函數ifstream::is_open()的返回值的成功開始閱讀。

+0

媽的,ShouI應該看到:P謝謝 –

0

的EOF是一個函數,所以你必須把它寫成

infile.eof() 

,或者你可以把函數getline到while條件

while(getline(infile,STRING)) 
1

應該

while (getline(infile,STRING)) { // Saves the line in STRING. 
    cout<<STRING; // Prints our STRING. 
} 

錯誤標誌例如eof只有在嘗試過之後纔會設置,並且無法讀取結尾。所設計的代碼(即使添加了infile.eof()中的缺失括號)將在getline失敗時在最後一次迭代中處理垃圾。所以你必須在getline運行之後測試流狀態,就像我在這裏展示的那樣。