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