我正在为c ++制作电话簿程序,但我无法将搜索功能转移到我的主要功能中。当我编译它并搜索名称时,它会使程序崩溃。
搜索功能:
int search(string name){
for(int i=0; i<counter; i++){
if(data[i][0] == name){
return i;
}
else{
cout << "Name not found" << endl;
}
}
}
主要功能:
int main(){
bool done = false;
int choice;
string name;
string areaCode;
string number;
load_contacts("contacts.txt");
cout << "Welcome to AddressBook" << endl;
while(!done){
cout << "What would you like to do?" << endl;
cout << "1) Display all contacts" << endl;
cout << "2) Add a contact" << endl;
cout << "3) Remove a contact" << endl;
cout << "4) Search a contact" << endl;
cout << "5) Exit" << endl;
cin >> choice;
switch (choice){
case 1:
display_contacts();
break;
case 2:
add_contacts(name, areaCode, number);
cout << "Contact Added!";
cout << endl;
break;
case 3:
cout << "Name to remove: ";
cin >> name;
remove_contacts(name);
break;
case 4:
cout << "Name to search: ";
cin >> name;
search(name);
break;
case 5: cout << "Good bye." << endl;
done = true;
break;
}
}
}
答案 0 :(得分:0)
您发布的代码存在一些问题,主要是由于调用了未定义的变量。
1:对于您的搜索方法,counter
无处不在,并被用作循环的数字限制器。
2:同样在您的搜索方法中,2D数组data
也是未定义的,除非它是load_contacts
方法设置的全局变量,而不是&#39;正在显示,所以目前你正在搜索一个不存在的二维数组。
3:您的"Name not found"
消息位于方法for循环中的else
语句中,因此每次循环找不到时都会执行名称。您可能希望将其移动到循环外部进行打印,然后返回错误编号,可能会-1
以便稍后处理。
4:您的search
方法是int
的返回类型,但是在main
中,您没有将返回值分配给任何变量使用,所以如果搜索成功,什么都不会发生。
如果我对其中任何一个都不正确,请告诉我,但我会首先关注明显的错误,看看它们是否导致崩溃。