1 条件语句
switch case的细节
❄ switch()
中的内容必须是整形变量或整型表达式,而case
后接整形常量或整形表达式
❄ case
中如果不加break
,则程序从case
入口一直运行到switch
结束,否则遇到break
停止。
❄ switch()
允许套用使用
❄ 注意使用default
一段代码进行解释
#include <stdio.h>
int main()
{
int i = 0;
int a = 0;
for (; i < 3; i++)
{
printf("请输入:");
scanf("%d", &a);
switch (a + 1)
{
case 1:
printf("%c\n", '1');
case 2:
printf("%c\n", '2');
case 3:
printf("%c\n", '3');
break;
case 4:
switch (i)
{
case 0:
printf("第0次打印\n");
break;
case 1:
printf("第1次打印\n");
break;
case 2:
printf("第2次打印\n");
break;
default:
break;
}
printf("%c\n", '4');
case 5:
printf("%c\n", '5');
default:
break;
}
}
return 0;
}
运行结果:
2 循环语句
2.1 while和for中的continue
for
中遇到continue
会进入调整语句;而while
中的continue
直接进入判断,会造成死循环。举例来说!
#include <stdio.h>
int main()
{
int a = 0;//初始化
while (a < 10)//判断语句
{
//改进的方法是将 a++ 移到这里(continue之前)。但是会造成a == 0时的条件消失,因为a自增了1。 并且增加了a == 10 的条件
if (9 == a)
continue; //当a == 9 时,continue会使得下面的代码不执行,而是会回到while的判断。
//此时a总为9,原因是 a++ 不再被执行,造成死循环。
printf("%d\n", a);
a++;//调整语句
}
return 0;
}
同样do...while
语句仍会产生相同的问题。与while
不同的是,程序首先会执行do{}
中的内容,再进行while()
里的判断,即如论如何,代码总是会被执行一次。一段错误代码进行说明continue
的问题:
#include <stdio.h>
int main()
{
int a = 0;//初始化
do
{
if (3 == a)
continue;
printf("%d\n", a);
a++;
} while (a < 10);
return 0;
}
而for
循环规避了以上的问题:
#include <stdio.h>
int main()
{
int a = 0;
//for(①;②;③) ①初始化; ②判断语句;③调整语句
//for循环避免了while_continue死循环的问题,因为在执行continue语句后,代码会首先执行 ③调整语句
//类似于以上将a++放到while循环第一句的做法,但是a == 0的条件不丢失,也不会使 a == 10 出现在for循环内。
for (a = 0; a < 10; a++)
{
if (9 == a)
continue;
printf("%d\n", a);
}
return 0;
}
运行结果:
2.2 关于for语句
//for(①;②;③) ①初始化; ②判断语句;③调整语句
- 1、关于for循环()包含的初始化、循环判定条件、调整三个语句,都可以省略;但当 ②判断语句 被省略时,会产生类似
while(1)
的用法,即产生死循环。 - 2、①;②;③ 可以内含多条语句,例如:
#include <stdio.h>
int main()
{
int a = 0;//初始化
int b = 0;
for (a = 0, b = 2; b = 0; a++, b++)
{
printf("%d\n", a);
}
return 0;
}
以上代码的运行结果为:
tip: 可以看到当判断语句执行赋值操作 b = 0 时,循环判定为假,循环结束;若修改b赋值为任意非零的值时,将产生死循环。
2.3 goto的使用技巧
使用goto
语句可以实现跳出两层乃至多层的循环,这是break
达不到的,因为break
只能跳出本层的循环。
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
while (1)
{
a++;
while (1)
{
b++;
if (10 == b)
goto end;
}
}
end:
printf("goto entrance:a = %d , b = %d\n", a, b);
return 0;
}