使用switch语句的注意事项

case后需要手动break

switch(i){
    case 1:
        语句1;
        break;
    case 2:
        语句2;
        break;
    default:
        语句3;
        break;
}

上述代码表示

  • i == 1时执行语句1
  • i == 2时执行语句2
  • 其他情况执行语句3
switch(i){
    case 1:
        语句1;
    case 2:
        语句2;
    default:
        语句3;
        break;
}

如果漏掉break

  • i == 1时执行语句1、2、3
  • i == 2时执行语句2、3
  • 其他情况时执行语句3

switch内的变量定义

变量没有定义在语句块内#

  • 变量的作用域是整个switch语句

  • 内部定义的变量只能声明,不能初始化。

image-20220119171404757

假设上述代码合法,则一旦控制流直接跳到false分支,也就同时略过了变量file_name和ival 的初始化过程。此时这两个变量位于作用域之内,跟在false之后的代码试图在尚未初始化的情况下使用它们,这显然是行不通的。因此C++语言规定,不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一个位置。

变量定义在语句块内#

  • 变量的作用域是case语句块内
  • 内部定义的变量可以初始化
case ture:
{
    //正确:声明语句位于语句块内部
    string file_name = get_file();
    //..
}
break;
case false:
	if ( file_name.empty()) //错误:file_name不在作用域内
    break;

表述多情况时不能用逗号

switch(i){
    case 1,2,3,4:   //错误写法
        cout<<"i = 1,2,3,4"<<endl;
        break;
    default :
        cout<<"in default"<<endl;
        break;
}

上述程序应该写为

switch(i){
    case 1: //正确写法
    case 2: 
    case 3: 
    case 4:
        cout<<"i = 1,2,3,4"<<endl;
        break;
    default :
        cout<<"in default"<<endl;
        break;
}

也可写为

switch(i){
    case 1: case 2: case 3: case 4: //正确写法
        cout<<"i = 1,2,3,4"<<endl;
        break;
    default :
        cout<<"in default"<<endl;
        break;
}
posted @   咪啪魔女  阅读(412)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示