C++ - 解析文件在最后一行迭代两次

use*_*750 0 c++ file

我目前有一个文本文件,如下所示:

加州22 23

华盛顿43 11

俄克拉荷马州98 23

每行的格式是string,double,double.每个都由一个空格隔开.我有以下方法来读取文件,但它似乎迭代文本文件的最后一行两次,为什么会这样?(即它创建了两个名为'Oklahoma'的City对象)

void openFile() {

    string line, name;
    double latitude, longitude;

    ifstream thefile("text.txt");
    if (thefile.is_open()) {
        while (getline(thefile, line)) {
            std::stringstream n(line);
            n >> name >> latitude >> longitude;
            City newCity(name, latitude, longitude);
            addNode(newCity);
        }
        thefile.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 5

我敢打赌,文件的最后一行是一个空行,导致

n >> name >> latitude >> longitude;
Run Code Online (Sandbox Code Playgroud)

安静地失败(因为你没有检查输入是否成功),并且变量line,name,latitude和longitude保持它们的值来自上一个成功的条目.

如何解决这个问题:

首先,保持变量的范围尽可能窄:在循环内定义的行,名称,纬度和经度.

其次,请务必检查您的操作(例如>>)是否成功.