我目前有一个如下所示的文本文件:
加州22 23
Washington 43 11
Oklahoma 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();
}
}
答案 0 :(得分:5)
我敢打赌,文件的最后一行是空行,导致
n >> name >> latitude >> longitude;
安静地失败(因为你没有检查输入是否成功),并且变量line,name,latitude和longitude保留了之前成功输入的值。
如何解决这个问题:
首先,保持变量的范围尽可能窄:在循环内定义线,名称,纬度和经度。
其次,请务必检查您的操作(例如>>)是否成功。