分支循环

分支结构-if语句和switch语句

if语句

C语言里,有两种分支语句ifswitch用来实现分支结构。
先来介绍if语句:

1.if函数的基本写法

#include <stdio.h>
int main()
{
    if(表达式);//表达式里面写的是判断的条件,表达式成立,则执行;反之,则语句不执行
    {
    执行语句
    }
    return 0;
}

C语言中,0为假,非0为真,所以if语句的判断既可以使用表达式里进行判断,如果成立则为真,结果为非0,语句执行;如果不成立,则结果为0,语句不执行,也可以直接使用0(假),非0(真)来直接放进去判断,效果相同。
if(表达式)示例如下:

#include <stdio.h>
void Compare(int a, int b)
{
    if (a > b)//使用了if来判断a是否大于b
    {
        printf("A大\n");
    }
    else if (a < b)//使用了else if的嵌套来判断a是否小于b
    {
        printf("B大\n");
    }
    else//使用了else来判断最后一种情况a等于b的时候
    {
        printf("一样大\n");
    }
}

    int main()
    {
        int a = 0;
        int b = 0;
        printf("输入两个数比较大小:");
        scanf("%d%d", &a, &b);//输入两个数
        Compare(a,b);//自定义函数来判断a和b的大小
        return 0;
    }

在上面代码中分别使用了

另外一种情况
if()里面直接放0或者1

#include <stdio.h>
int main()
{
	int a = 0;
	printf("请输入一个数来判断你是否要给我擦皮鞋:");
	scanf("%d", &a);
	if (1)//无论你填了什么,判断永远是真
	{
		printf("不管是什么,都要给我,擦皮鞋\n");
	}
	return 0;
}

上面代码中,if语句里面填的为非0(真),所以里面的判断条件跟你输入什么都没有关系,不会影响输出结果,都会直接执行语句。

2.else

在第一个代码案例中,就已经使用了else。那else什么时候用呢?比如说一种情况,假如a和b是非0正整数,你要判断a和b谁大,那么就有三种情况

#include <stdio.h>
int main()
{
    if (a > b)//使用了if来判断a是否大于b
    {
        printf("A大\n");
    }
    else
    {
        printf("B大\n");//err
    }
    return  0;
}

上面代码中if语句正常情况只能判断一种情况,那就是要么是成立(非0),要么不成立(0)。只能用来判断其中两个情况,但是情况一共可能有三种,所以计算机第一种情况外的两种情况都会执行第二种情况,比如:a和b一样大,那么也只会打印B大。
那如果想要判断更多情况那就需要使用if...else语句了。

3.if分支中包含多条语句

默认在if...else语句中默认都只控制一条语句,比如:

#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a == 0)
	{
		printf("数字为0\n");
	}
	else
	{
		printf("数字不是0\n");
	}
	return  0;
}

如果想要判断三种既以上,就要使用else if
示例如下:

#include <stdio.h>
int main()
{
      if (a > b)//使用了if来判断a是否大于b
    {
        printf("A大\n");
    }
    else if (a < b)//使用了else if的嵌套来判断a是否小于b
    {
        printf("B大\n");
    }
    else//使用了else来判断最后一种情况a等于b的时候
    {
        printf("一样大\n");
    }
    return  0;
}

这样就可以用来判断多种情况了。

悬空else情况

在没什么经验的时候写代码会经常出现一些问题.
如果有多个if和else,记住,else总是跟最接近的if匹配
示例如下:

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("heihei\n");
    else 
            printf("XD\n");
    return 0;
}
那么按理说a是0不是1的情况下会打印XD
但是实际上什么都不输出这就是悬空else问题如果有多个if和else可以记住else总是跟**最接近**的if匹配
那么上面的问题该如何解决:
```c
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
    {
        if(b == 2)
            printf("heihei\n");
    }
    else 
            printf("XD\n");
    return 0;
}

这样就代码就可以正常运行了。