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



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

加州 22 23

华盛顿 43 11

俄克拉荷马州 98 23

每行的格式为字符串、双精度、双精度。每个都由一个空格分隔。我有以下方法来读取文件,但是它似乎迭代了文本文件的最后一行两次,这是为什么?(即,它创建两个名为"俄克拉荷马州"的城市对象)

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();
    }
}

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

n >> name >> latitude >> longitude;

以静默方式失败(因为您不检查输入是否成功),并且变量行、名称、纬度和经度保留其上一个成功条目的值。

如何解决这个问题:

首先,使变量的范围尽可能窄:循环内定义的线、名称、纬度和经度。

其次,始终检查您的操作(例如>>)是否成功。

相关内容

  • 没有找到相关文章

最新更新