switch语句
switch语句也是一种分支语句。常常用于多分支的情况。
比如:
输入1,输出星期一;输入2,输出星期二……输入7,输出星期日
格式:
switch (整型表达式)
{
语句项;
}
而语句项是什么呢?
//是一些case语句:
//如下:
case 整型常量表达式:
语句;
在switch语句中的break
在switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支。
比如:
int main()
{
int day = 0;
scanf("%d", &day);
switch (day) //switch判断括号内结果为几,是几就从对应的case入口进去
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
break;
}
return 0;
}
有时候我们的需求变了,如输入1-5输出工作日,输入6-7输出休息日,那么我们的代码就应该这样实现:
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
break;
}
return 0;
}
break语句的实际效果是把语句列表划分为不同的部分。
编程好习惯:
在最后一个case语句的后面加上一条break语句。(之所以这么些是可以避免出现在以前的最后一个case语句后面忘了添加break语句)。
default子句
如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个case标签可以出现的位置。
当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。
编程好习惯
在每个switch语句中都放一条default子句是个好习惯,甚至可以在后面再加一个break。
循环语句
- while
- for
- do while
while循环
我们已经掌握了,if语句:
if (条件)
语句;
当条件满足的情况下,if语句后的语句执行,否则不执行。但是这个语句只会执行一次。
但我们生活中很多实际例子时:同一件事我们需要完成很多次。
那我们怎么做呢?C语言中给我们引入了:while语句,可以实现循环。
//while 语法结构
while (表达式)
循环语句;
expr:表达式;stmt:statement,语句
例:
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
//break;//这里i==5的时候不打印,跳出了这个循环,但是i确实是5
continue;//continue是跳过本次循环后面的代码,继续循环下一次,i一直等于5,一直continue
printf("%d ", i);
i++;
}
return 0;
}
总结:
break在while循环中的作用:在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。所以:while中的break是用于永久中止循环的。
continue的作用:用于终止本次循环,本次循环中continue后面的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。
分析下列代码(分析已注释在代码中)
int main()
{
int ch = 0;
//EOF - end of file,文件结束标志,值是-1
while ((ch = getchar()) != EOF)//getchar,接收键盘输入的一个字符
{
putchar(ch);//putchar,输出
}
return 0;
}
//这个循环只有接收到输入EOF才会停止
//注意,并不是直接输入EOF就可以停止代码
//EOF程序会读取三次,第一次读取E第二次读取O第三次读取F
//键盘ctrl+z才是正确的中止代码