-3

我正在做一个家庭作业,我应该使用我们的教授连续列表类来存储个人记录列表,然后可以打印或搜索特定记录。个人记录结构仅包含 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++ 调试器,但我不熟悉它,它并没有给我太多的洞察力。任何帮助是极大的赞赏!

4

1 回答 1

1

您正在访问 element 0 和 element size()。除非size()在您的程序中实际上意味着size - 1,否则这是一个问题。

于 2014-06-06T15:45:05.200 回答