一.if
if语句的语法形式如下
- if (表达式)
- 语句
表达式
- 真:非0,执行语句
- 假:0,不执行语句
例:输入一个整数,判断是否为奇数
if的判断语句还可写成if(a%2)
a若是奇数,a%2=1,不为0,表达式为真,执行语句,输出a
a若是偶数,a%2=0,为0,表达式为假,不执行语句
二.else
if..else语句语法形式如下
- if(表达式)
- 语句1
- else
- 语句2
输入一个整数,判断是奇数还是偶数
三.分支中包含多条语句
默认在if,else语句中默认都只控制一条语句,比如
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年了\n");
printf("可以考驾照了\n");
return 0;
}
上⾯的代码,你会发现输⼊的值不管是>=18 还是<18,"可以谈恋爱了" 都会打印在屏幕上。
这是因为if语句只能控制一条语句,就是printf("成年了\n");,if语句为真,则打印成年了,if语句为假,则不打印,对于printf("可以谈恋爱了\n");是独立存在的,不管if语句条件的真假都会被执行。
那如果我们要if语句同时控制两条语句,怎么办呢?那就要使用{ }将代码括起来;else后也可以跟上大括号,如下:
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)//if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以考驾照了\n");
}
else//else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年\n");
printf("不可以考驾照\n");
}
return 0;
}
四.嵌套if
在if else语句中,else可以和另一个if语句连用,构成多重判断。
例如:要求输入一个整数,判断输入的整数是0,还是正数,还是负数。
嵌套在else语句中
嵌套在if语句中
五.悬空else问题
如果有多个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;
}
很多人一开始会认为,因为a=0,所以第一个if表达式为假,就执行else打印“haha”
但当我们去执行这个代码时,发现啥也不是
这是因为else悬空了,代码中的else与第一条if语句是对齐的,让我们以为else是和第一个if匹配的,而实际上else离第二条if语句更近,与第二个if匹配,这样后面的if...else是嵌套在第一个if中的,当第一个if的表达式不成立时,嵌套的if和elae就没机会执行了,这样最终啥也没打印
可以将代码改成更容易理解的嵌套模式
#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;
}
只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使 用,让代码的可读性更高。