问题
"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; // ...
}