来看看简单的switch+enum用法
按上下左右
enum director
{
p_up=72,p_down=80,p_left=75,p_right=77
};
int main()
{
enum director dir;
while (1)
{
switch (getch())
{
case p_up:
printf("向上\n");
break;
case p_down:
printf("向下\n");
break;
case p_left:\
printf("向左\n");
break;
case p_right:
printf("向右\n");
break;
}
}
return 0;
}
需要注意的是 enum默认从左往右是从0开始,p_up=72..是自己定义的,getchar()获取键码函数必须加头文件#include<conio.h>,这里就不用过多细讲了
开始我们接下来的环节:
一般形式:
switch(表达式){
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
…
case 常量表达式n: 语句n;
default: 语句n+1;
}
C语言虽然没有限制 if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况。例如,输入一个整数,输出该整数对应的星期几的英文表示:
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d", &a);
if (a == 1){
printf("Monday\n");
}
else if (a == 2){
printf("Tuesday\n");
}
else if (a == 3){
printf("Wednesday\n");
}
else if (a == 4){
printf("Thursday\n");
}
else if (a == 5){
printf("Friday\n");
}
else if (a == 6){
printf("Saturday\n");
}
else if (a == 7){
printf("Sunday\n");
}
else{
printf("error\n");
}
return 0;
}
对于这种情况,实际开发中一般使用 switch 语句代替,请看下面的代码:
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d", &a);
switch (a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}
1.
if(表达式1)
{
语句块;
}
判断表达式1的真假 如果为真 执行语句块
否则 跳过
表达式可以是一个变量
判断 变量是否为1
如果是一个表达式
判断表达式的返回值
2.
if(表达式1)
{
语句块1;
}
else
{
语句块2;
}
否则
如果 否则
3.
if的嵌套
当嵌套的时候 要注意 每个else是和相关联的 if在一起
else一定要注意逻辑 是和相应的if匹配的
如果匹配错 逻辑就会错误
else是必须跟在if后面的
4.
if(表达式1)
{
语句块1;
}
else if(表达式2)
{
语句块2;
}
else if(表达式3)
{
语句块3;
}
else
{
语句块4;
}
if 注意事项:
1.if语句后面不要+分号 如果一定要+分号
如果后面没有else 可以在花括号结尾加分号 表示空语句
如果有else 不能加分号
2.if 后面的花括号是可以省略
如果是一个语句
但是 如果是声明变量 就必须要括号
必须加花括号
3.if 后面可以跟任意个语句
必须在花括号内
4.非0即1 避免表达式 因为码代码的失误造成永真或者永假
if(a==1) {} if(a=1) {}
把常量写在关系运算符的左侧
因为常量是不可修改的 常量不能为赋值运算符的左值
5.if语句里面 定义的变量 作用域只在{}内
只能在当前的语句块内访问
6.if的表达式里面 可以有多个任意表达式
可以是一个简单变量
可以是一个表达式
也可以是 多个逻辑语句 组合
0|| 1 ||asda ||sad
1&&1&&1&&0&&asdjah&&asda
用switch里面的变量 去匹配case的情况
如果匹配成功就执行case之后的语句
int a=3;
switch(a)
{
case 3:
printf("Hello World!\n");
break;
}
a 进入switch之后 会去匹配相应的值
如果 匹配成功 就执行 相应的内容
在case后面 必须有break
用来跳出 当前 switch
开关 转换 鞭子
break 只能用于循环或者 开关语句 也就是 switch
会逐个判断
如果匹配到就会执行
如果全部判断完 没有匹配成功就会结束
两个case的值 不能相同
break跳出
如果没有break case语句的穿透性
如果匹配成功 而且没有break
会直接执行下一个case 并且不需要匹配
直到break default 也会穿
switch 的注意事项:
1.switch 表示式内 必须是 整型类型的表达式
会有别的类型 但是 实质上都是整型
char 枚举
int 常量 char 字符常量
2.case 后面 只能接常量表达式
并且 不能重复
任一case的值都不相同
3.switch 小括号后面不能加分号
如果一定要加 只能加在花括号后面
4.default 可以写在任何位置
不影响执行顺序