2011-11-01 73 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运行之后测试流状态,就像我在这里展示的那样。