巧用switch(c++)

switch的使用

1.1 基本格式
switch (整型变量或者常量)
{
    case 整型1:
    代码;
    break;
    ...
    default:
    代码;
    break;
}
1.2 c++17特有
  1. fallthrough

    [[fallthrough]];//作用是用来标志此处不使用break
    代码;//依旧会执行
    

    此处作用只是告诉编译器这里特意不写break,让系统不发生警告。但是依旧会执行之后的代码。

  2. 临时变量

    • 正确的写法

       switch (临时变量声明; 整型变量或者常量)//临时变量在整个switch有效
        {
                代码;
        }
      
    • 会出现报错

      • 因为在switch中,switch执行的顺序不一定,有可能执行case 1,有可能case 2…。所以你在case1中声明了,但是这个变量在整个switch块中又是有效的,所以可能出现的情况就是没有case1的声明但是之后的case却调用了这个变量,这样就造成了矛盾;
  • 可行的声明方法是类似case 2的方法,把变量包含在一个中括号中,这样变量的生命周期就只有这个语句块中。

    switch ( 整型变量或者常量)//临时变量在整个switch有效
    {
    case 1:
        变量声明;//不能这样进行声明
       break;
    case 2:
    {
        变量声明;//可行的声明方法
       break;
    }
    ...
    default:
        变量声明;
        break;
    }
    
1.3 判断语句配合goto使用
  • goto语句格式

    标签:
    	语句段;
    	goto 标签;
    
  • 实现效果:能够实现类似循环的效果,并且比循环更加灵活

  • 代码示例:

    int main(){
        char a;
        
    ling:
        cout<<"please input alpha a"<<std::endl;
        cin >> a;
        if (islower(a))//65-90是大写字母的范围
        {
            cout << "please inout upper";
            goto ling;
        }
        else
        {
            a+=32;
            cout<<"lower is: "<<a;
        }
    
        system("pause");
        return 0;
    }
    
    1.3 谨防goto或者循环可进行的破解程序
  • 银行中密码可以进行的破解方式:

    1. 针对一个卡对密码进行依次遍历
    2. 针对一个密码对多个银行卡进行遍历(可以破解对密码有访问次数限制的破解)
  • 破解程序模拟实现:

    //repassword:破解密码	password对应密码
    unsigned Crack_pw(unsigned repassword,unsigned password){
    ling1:
        if(repassword==password)
            return repassword;
        else
        {
            if(repassword<password)
                {repassword++;
                goto ling1;}
            else
            {
                cout<<"Appropriately reduce the initial value of cracked password"<<endl;//适当减少破解密码的初始值
                cout<<"please input repasswprd"<<endl;
                cin>>repassword;
                goto ling1;//warning: control reaches end of non-void function [-Wreturn-type]没有写就会出现这个警告,表示有些情况没有返回值
            }
            
        }
    }
    

猜你喜欢

转载自blog.csdn.net/weixin_42295969/article/details/106225050