我们都知道,在抽卡的时候,可以自主选择只抽一次或者十连抽,但在上面的if语句中,我们是直接判断能不能抽十连,资源够的话就直接抽了,但可能我不想直接抽十连,那该怎么办,怎么做到像游戏里面那样可以自主选择呢?说实话,我也不知道,但我们不妨简化一下问题,假设抽十连是数字1,单发时数字2,然后可以我们可以通过选择数字1或2来决定我们的抽卡方式,这就涉及到下一个分支结构,switch语句
switch...case...
switch语句的基本结构是:
switch (整数表达式)
{
case 整数表达式 : 语句;
}
switch在英文中是打开的意思,所以括号内的表达式就是switch打开的东西,switch语句会根据括号内的值来选择对应的case语句,选择的根据就是case语句后面的整数表达式的值,要注意的是,表达式的值必须是整数,而且case与后面的表达式要有空格。
借助switch语句我们就可以实现一个简洁的选择抽卡的功能,我们假设用户是变量a,再设置一个变量b来记录我们抽卡的次数:
int b = 0;
switch (a)
{
case 1: printf("十连\n"); b += 10;
case 2: printf("单抽\n"); b++;
}
printf("%d\n", b);
假设我们选择了十连,程序开始运行
神奇的事情出现了,结果是我们抽了11发,难道现在抽十连还送一发?
这是因为实际上switch语句也是按顺序运行下来的,从我们匹配的那个case语句一直到最后一个,要想实现只执行一个case语句,要在case语句后面加上一个break,让它直接结束switch语句:
int b = 0;
switch (a)
{
case 1: printf("十连\n");
b += 10;
break;
case 2: printf("单抽\n");
b++;
break;
}
printf("%d\n", b);
这样子就可以正常实现选择功能了。
但是假如我们用户输入错误了,比如输入了个3,那会发生什么
我们看到程序正常运行,也没有报错,但是0表示我们没有抽任何一次卡,说明switch语句没有被执行,由此我们可以推断出,在变量于case后任何一个值都不匹配时,switch语句会被跳过,虽然不会报错,但假设我们的程序比较复杂时,可能会导致出现未知的错误,所以这时候就需要default,当我们没有匹配项目是,会自动匹配到default后面的语句。
int b = 0;
switch (a)
{
case 1: printf("十连\n");
b += 10;
break;
case 2: printf("单抽\n");
b++;
break;
default:
printf("未进行抽奖");
break;
}
printf("%d\n", b);
这时候再输入3时程序就会输出未进行抽奖。
要注意的是default语句的位置是不固定的,可以在case语句的前面或者后面,对程序没有影响。