问题
"name"的初始化操作由"case"标签跳过

 问题代码
case 3: // 3、删除联系人string name;cout << "请输入删除联系人姓名:" << endl;cin >> name;if (isExistPerson(&abs, name) == -1){cout << "查无此人" << endl;}else{cout << "找到此人" << endl;}break;
解决
给case下的语句放到{}里面包裹
case 3: // 3、删除联系人
{string name;cout << "请输入删除联系人姓名:" << endl;cin >> name;if (isExistPerson(&abs, name) == -1){cout << "查无此人" << endl;}else{cout << "找到此人" << endl;}break;
}
原因
当case中的代码只有一行的时候,不需要添加{},可以直接编写代码;
但是,当case中的代码不止一行的时候,需要把代码放到{}中。
如果你想在case标签下有一个或多个语句作为一个代码块来执行,那么你应该使用花括号。这有助于确保逻辑上的分组,并防止意外的fall-through行为(即,一个case的代码块执行完后不会自动跳到下一个case)。
switch (variable) {  case 1:  // 单个语句,不需要花括号  doSomething();  break;  case 2:  // 如果有多个语句,建议使用花括号  {  doSomethingElse();  doAnotherThing();  }  break;  // ...  
}