проверка строки перед чтением файла перед созданием нового узла - PullRequest
0 голосов
/ 02 мая 2020

файл читается

outPut указанного файла

Я пытаюсь прочитать файл и сохранить его данные в моем связанном -список. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я читаю информацию о человеке, которая содержит второй адрес, моя функция только обновляет мой связанный список данными, содержащими два адреса. примечание: при печати моего списка ссылок это происходит в обратном порядке, потому что добавляется каждый узел. Обратите внимание, что нижние 5 операторов печати содержат 1 адрес, это первые 5 строк, которые я извлекаю из файла. Как только функция попадает на 6-ю строку, которая содержит два адреса, она не может обновить мой список данными, содержащими только 1 адрес. Тем не менее, он продолжает обновлять мой список двух данных, содержащих 2 адреса.

void AddressBook::readFile(string fileName) {

    ifstream f(fileName);

    string firstName = "", lastName, phoneNumber, buildingNumber, street, city, state, zipCode, buildingNumber_2, street_2, city_2, state_2, zipCode_2, entry;
    bool twoAddr = false;

    if (!f.is_open()) { die("file not open"); }

    while (f >> entry) {
        if (isdigit(entry[0])) {
            buildingNumber_2 = entry;
            f >> street_2 >> city_2 >> state_2 >> zipCode_2;
            addEntry(Person(firstName, lastName, phoneNumber, Address(buildingNumber, street, city, state, zipCode), Address(buildingNumber_2, street_2, city_2, state_2, zipCode_2)));
                twoAddr = true;
        }
        else {
            if (firstName != "" && !twoAddr) {
                addEntry(Person(firstName, lastName, phoneNumber, Address(buildingNumber, street, city, state, zipCode)));
                twoAddr = false;
            }
            firstName = entry;
            f >> lastName >> phoneNumber >> buildingNumber >> street >> city >> state >> zipCode;
        }
    }
}



1 Ответ

0 голосов
/ 02 мая 2020

Попробуйте реализовать этот алгоритм:

for (;;) {
  line = file.readline();
  if (is_person_line(line))
    addEntry(create_person(line));
  else if (is_address_only(line))
    entries[-1].add_address(create_address(line));
}

Это также должно сделать ваш код более понятным.

...