在文本文件中读取一行两次

Ahm*_*med 2 c++

我有这个文本样本

Ahmed 10
kmal 5
doola 6
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码来阅读它

if (myfile.is_open())
{
  while ( myfile.good() )
{

    myfile >> name;
    myfile >> phone;
    cout << name <<" "<<phone<<endl;

}
myfile.close();
Run Code Online (Sandbox Code Playgroud)

}

我得到了这个输出

Ahmed 10
kmal 5
doola 6
doola 6
Run Code Online (Sandbox Code Playgroud)

为什么这段代码会读取最后一行两次?

Ben*_*igt 6

myfile.good()读取失败后变为假.与...相同myfile.eof().

你想要的基本上是:

myfile >> name;
myfile >> phone;
if (!myfile.good()) break;
Run Code Online (Sandbox Code Playgroud)

这可以缩短为:

if (!(myfile >> name >> phone)) break;
Run Code Online (Sandbox Code Playgroud)

或者最后:

while (myfile >> name >> phone) { ... }
Run Code Online (Sandbox Code Playgroud)