读取文件直到结束比使用istream eof更好的方法是什么?

时间:2013-04-23 02:12:43

标签: c++ string istream

我已经读过使用istream eof是“buggy”而不是编写代码的“正式”方式,那么什么是更好的代码?例如,我有以下代码:

using namespace std; //I've heard this is bad practice also

int main(){
    string line;
    ifstream myfile("example.txt");
    while(!myfile.eof()){
        getline(myfile, line);
    }//while
    //do something with line
}//main

我该怎么替换!myfile.eof()用?谢谢!

2 个答案:

答案 0 :(得分:3)

if (ifstream myfile("example.txt"))
{
    while (getline(myfile, line))
    {
        ...
    }
    if (!eof(myfile))
        std::cerr << "error before end of input file\n";
}
else
    std::cerr << "error opening input file\n";

答案 1 :(得分:3)

关键是要意识到getline返回对流的引用,如果流是OK,则流引用上的布尔操作返回true,如果是前一个,则返回false手术失败。这包括无法打开文件。

while (getline(myfile, line))
{
    // do something with line
}

我不知道为什么你的原始例子在while循环之外“做某事”。