hello,everybody!最近又更新了哈,希望对大家有所帮助
switch case关键字
基本语法:
switch(整型变量/常量/整型表达式){case 1:var 1;break;case 2:var 2;break;case 3:var 3;break;default:break;
}
switch case语句也和if语句一样具有判断和分支的功能,case进行判断,break进行分支
我们得出一个结论:
任何具有判定功能的语法,都必须具备:判定+分支
注意点:
default可以放在任意的位置,不影响程序的运行,只不过按照语义来说,更习惯于放在程序后面
switch case语句不建议使用return 语句,虽然程序不会报错,但是这是一个不好的习惯,如果哪个程序员在调试的时候眼花了找不到为什么总是中途退出,会造成不必要的麻烦
再来看一个点:
看下面几行代码:
int main()
{const int a=10;switch(a){case a:printf("%d",12);break;default:break;}
}
这里需要说明的是被const修饰的变量,可以理解为变成了常量,但是这里不能写成case a,编译器会报错
case语句的排列顺序
1.按字母或数字顺序排列各条case语句
2.把正常情况放在前面,把异常情况放在后面。
如果有多个正常情况和异常情况,把正常情况放在前面,并做好注释;把异常情况放在后面,同样要做好注释
还有几个关键点:
1.不要为了使用switch语句,而刻意创建变量
int main()
{int arr[]={1,2,3,4,5};for(int i=0;i<5;i++){switch(arr[0])//可以这样来解决{case 1:printf("%d\n",12);}}return 0;
}
2.将default子句用于检查真正的默认情况
switch case 语句的相关总结**
1.switch语法结构中,case完成判定功能,break完成分支功能,default处理异常情况
2.case:执行语句==1:n,case多条语句(不能定义变量,如果需要,{},函数)break
3.case: 执行语句==n :1,多条case后续不写break
4.default:可以出现在任何地方,推荐放在结尾
在这里插入代码片
5.case:不能:const,普通的变量,建议要有好的case布局
do while for关键字
while循环
int main()
{int count=10;//循环条件初始化while(count>0)//循环条件判断{printf("%d\n",12);count--;//循环条件判断}
}
for循环
int main()
{for(int i=0;i<10;i++){printf("%d\n",12);}
}
个人而言,更推荐for循环,因为不会轻易地忘掉循环的三个条件,同时观感更好
do while循环
int count=10//循环条件初始化
do
{printf("%d\n",1);count--;//循环条件判断
}
while(count>0);//循环条件判断,至少执行一次
补充内容-三种循环的死循环写法**
while
while(1)
{printf(".");
}
不要粗略地认为1就是真,0就是假,非零为真
for循环
int main()
{for(;;){printf(" .");}
}
do while
int main()
{do{}while(1);
}
要提出一个概念:
任何C语言程序,在默认编译好之后,运行时,都会打开三个输入输出流
stdin:标准输入,FILE*stdin,键盘
stdout:标准输出,FILE*stdout,显示器
stderr:标准错误,FILE*stderr,显示器
拿getchar举例子
int main()
{while (1){int c = getchar();if (c == '#'){break;}printf("%d", c);//注意不要添加\n,因为在终端运行的时候回车也算了一个换行符,这样会空两行}printf("while end...\n");
}
getchar 需要注意一个细节,前面的修饰类型是int在这里插入代码片
为什么不能够是char,char能表示返回成功,但是返回失败可能不行,因为char能表示的范围是0-255,二进制的0000 0000-1111 1111
,如果有个数是1 0000 0000 ,此时会进行截断,造成不准确
需要补充个结论:键盘输入的内容,或者往显示器打印的内容都是字符!!!
打个比方:
int main()
{int ret=printf("%d\n",1234);printf("%d\n",ret);
}
break continue关键字
首先来谈谈break
来看下面几行代码:
int main()
{while(1){int c=putchar();if(c=='#'){break;//跳出循环}putchar(c);}printf("\n break out\n");
}
看一下运行结果:
如果是continue
int main()
{while (1){int c = getchar();if (c == '#'){continue;//结束本次循环}putchar(c);}printf("\n break out\n");return 0;
}
那么又要有疑问的
跳出本次循环是从1开始还是2开始再来?
答案是2,因为还要再进行条件判定,是否能够进入循环
再来看for循环的continue关键字
看到程序运行的结果,我们可以得出这样的逻辑链,continue会先进行自增再进行判断循环条件
我们可以得出一个结论:
while ,do while continue都是回到条件判断处,但是for是到条件更新处,因为while,do while条件判定和条件耿欣的条件都是分离的
循环语句的使用注意点
1.在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数
2.建议for语句的循环控制变量的取值采用“半开半闭区间”写法
好处是:循环次数明确,便于进行个数计算
goto语句
下面为用法示例:
goto end;printf("%d\n", 1);printf("%d\n", 2);printf("%d\n", 3);
end:printf("%d\n", 4);printf("%d\n", 5);printf("%d\n", 6);
运行结果如下:
虽然在一些大型项目中会应用到goto关键字,但是建议还是不要使用goto语句,因为太灵活了,会破坏整体的结构性。