switch的使用
1.1 基本格式
switch (整型变量或者常量)
{
case 整型1:
代码;
break;
...
default:
代码;
break;
}
1.2 c++17特有
-
fallthrough
[[fallthrough]];//作用是用来标志此处不使用break 代码;//依旧会执行
此处作用只是告诉编译器这里特意不写break,让系统不发生警告。但是依旧会执行之后的代码。
-
临时变量
-
正确的写法
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或者循环可进行的破解程序
-
银行中密码可以进行的破解方式:
- 针对一个卡对密码进行依次遍历
- 针对一个密码对多个银行卡进行遍历(可以破解对密码有访问次数限制的破解)
-
破解程序模拟实现:
//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]没有写就会出现这个警告,表示有些情况没有返回值 } } }