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