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

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

最佳答案

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

n >> name >> latitude >> longitude;

安静地失败(因为您不检查输入是否成功),并且变量 line、name、latitude 和 longitude 保留上一次成功输入的值。

如何解决这个问题:

首先,尽可能缩小变量的范围:在循环内定义行、名称、纬度和经度。

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

关于C++ - 解析文件在最后一行迭代两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27139903/

相关文章:

c++ - 调用 ConnectNamedPipe 时出现 ERROR_INVALID_HANDLE

c++ - 有没有办法从一个程序打开一个新的控制台然后 cout 进去?

c++ - "heterogeneous-object"类中的复制构造函数

c++ - cppunit 断言失败时如何显示十六进制值

c - C 语言可以从文件中读取常量吗?

android - 空目录不在android中删除

python - 将文本文件读入字典

python - 编译和运行后 boost python 给我段错误

c++ - C++ 检查文件是否存在

c - 如何从 C 语言的文件中逐行读取每行两个字符串