1)单独一个分号是空语句,在一些情况下有重要作用
2)使用if-else语句时,如果条件成立,要执行多条语句,这里要用一对 { } 封装一个代码块。如果if / else后面是单条语句则不用大括号括起。
3)注意C语言中if-else遵循就近原则,不看缩进,else是和它离的最近的if匹配的。例如
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
结果输出是空,因为else自动跟第二个if进行匹配了,若想改正,应使用大括号,改正为:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
4)注意判断条件里的判等是==,不要写成=,否则是赋值语句,值为真。
所以一般在判断常量和变量是否相等时,把常量放在前面,这样即使写错等号,也会产生报错,因为变量是无法赋值给常量的。
5)switch语句中记得在每个最后加上break,否则会将入口后面的都执行,比如case 3进去后,4567....都会执行
当然也有例外:比如需求: 1. 输入1-5,输出的是“weekday”; 2. 输入6-7,输出“weekend
#include <stdio.h>
//switch代码演示
int main()
{
int day = 0;
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
所以break语句 的实际效果是把语句列表划分为不同的分支部分。
default表示默认值,在输入9,10之类的时输出
编程好习惯 在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。
6)default子句
如果表达的值与所有的case标签的值都不匹配怎么办? 其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签 default: 写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
编程好习惯 在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
7)注意switch(整型表达式),后面必须是整型,不能是浮点型。
而case 整形常量表达式: 后面也必须是整型,且为常量。比如可以是(1+0)。但不能是1.0或者变量i
注意case后面有冒号
8)练习:
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
答案是5,3 注意case3的break跳出的是内部的switch,调到外面case4了