2014-11-26 3 views
0

я в настоящее время есть текстовый файл, который выглядит следующим образом:C++ - Синтаксический файл итерация дважды последней строке

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

Вы видите, что он перебирает дважды по последней строке, переходя через код? – adamdc78

ответ

5

Моя ставка является то, что последняя строка файла пустая строка, в результате чего

n >> name >> latitude >> longitude; 

спокойно терпеть неудачу (потому что вы не проверяйте, прошел ли вход), а переменная строка, имя, широта и долгота сохраняют свои значения с предыдущей успешной записи.

Как это исправить:

Во-первых, сохранить объем ваших переменных как можно более узким: определяется линией, название, широта, и долгота внутри цикла.

Во-вторых, всегда проверяйте, что ваша операция (например, >>) выполнена успешно.

+0

Да, вы были правы, у меня была лишняя пустая строка в текстовом файле, который, кажется, вызывал это, спасибо! – user3371750

+0

Вы должны принять ответ, если он был прав. – adamdc78

Смежные вопросы