Почему-то не все мои значения вставляются в список

Я делаю домашнее задание, где я должен использовать класс непрерывных списков наших профессоров для хранения списка личных записей, которые затем могут быть распечатаны или найдены для конкретной записи. Структура личных записей содержит только данные о членах для имени first_name, last_name и int.

Моя проблема - вставка записей. Мы должны вставить в правильном алфавитном порядке, и любые записи с одинаковыми именем и фамилией отбрасываются. Мой код ниже:

         string input;
         cout << endl << "Enter Data File Name:" << endl;
         getline(cin, input);
         ifstream insertion_file;
         insertion_file.open(input.c_str());
         if(!insertion_file.fail()){
            record_list.clear();

            while(!insertion_file.fail() && !insertion_file.eof()){
               Personal_record input_rec;
               string code_string;
               getline(insertion_file, input_rec.last_name);
               getline(insertion_file, input_rec.first_name);
               getline(insertion_file, code_string);
               input_rec.code = string_to_int(code_string);


               //implementation of requirement 1
               if (record_list.empty()) record_list.insert(0, input_rec);
               else { 
                   int i = 0;
                   Personal_record temp;
                   //while loop increments i and retrieves a record until input_rec.last_name is not smaller than temp.last_name
                   do {
                       record_list.retrieve(i, temp);
                       i++;
                   } while (input_rec.last_name < temp.last_name && i <= record_list.size());

                   //if last_names are the same, check first names
                   if (input_rec.last_name == temp.last_name) {
                       while (input_rec.first_name < temp.first_name) record_list.retrieve(++i, temp);
                       //if last names are the same, only insert if there is no matching first name
                       if (input_rec.first_name != temp.first_name) record_list.insert(i, input_rec);
                   }

                   //if last name is not the same, insert
                   else record_list.insert(i, input_rec);                 
               }
            }
         } else
            cout << "Invalid file name." << endl;

Только код после комментария "реализация требования 1" - мой, остальное - код профессора, который нельзя изменить.

Я не получаю никаких ошибок компилятора, но программа, кажется, зависает где-то в процессе. После вставки записей из файла он должен вернуть управление пользователю для ввода команды, но этого никогда не происходит. Я пытаюсь использовать отладчик Visual C++, но я не знаком с ним, и он не дает мне много понимания. Любая помощь очень ценится!

1 ответ

Решение

Вы получаете доступ как к элементу 0, так и к элементу size(), Если не size() в вашей программе на самом деле означает size - 1, это проблема.

Другие вопросы по тегам