我已经读过使用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()用?谢谢!
答案 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
循环之外“做某事”。