C之分支语句(六)

        我们在日常生活中难免会遇到要做选择的情况,那么在 C 语言中也有做选择的情况。在这种情况下,我们的代码又该怎样写呢?这时就可以用到我们的分支语句了。  总体来说,我们在 C 语言中可以经常看到两种分支语句:第一种 if 分支语句,第二章就是 switch 分支语句了。我们先来介绍第一种分支语句,if 分支语句。

创新互联主营囊谦网站建设的网络公司,主营网站建设方案,成都App定制开发,囊谦h5微信小程序搭建,囊谦网站营销推广欢迎囊谦等地区企业咨询

        if 语句用于根据条件选择执行的语句,那么这时对应的 else 不能独立存在且总是与它最近的 if 相匹配,else 语句后可以接连其他 if 语句,用法如下:

C之分支语句(六)

        那么在 if 语句中做零值比较的话,我们得注意几点问题:1、bool 型变量应该直接出现于条件中,不要进行比较;2、变量和 0 值进行比较时,0 值应该出现在比较符号左边;3、float 型变量不能直接进行 0 值比较,需要定义精度。因为我们知道 float 型变量是不精确的,所以不能直接进行比较。为了更加形象的说明,我们总结如下:

C之分支语句(六)

        下来我们做个示例对 if 语句进行说明,代码如下:

#include 

void f1(int i)
{
    if( i < 6 )
    {
        printf("Failed!\n");
    }
    else if( (6 <= i) && (i <= 8) )
    {
        printf("Good!\n");
    }
    else
    {
        printf("Perfect!\n");
    }
}

void f2(char i)
{
    if( 'c' == i )
    {
        printf("Compile\n");
    }
    else if( 'd' == i )
    {
        printf("Debug\n");
    }
    else if( 'o' == i )
    {
        printf("Object\n");
    }
    else if( 'r' == i )
    {
        printf("Run\n");
    }
    else
    {
        printf("Unknown\n");
    }
}

int main()
{
    f1(5);        // Failed!
    f1(7);        // Good!
    f1(9);        // Perfect!
    
    f2('o');      // Object
    f2('d');      // Debug
    f2('e');      // Unknown
       
    return 0;
}

        根绝我们之前的分析,打印出来的结果应该和我们分析的一样,我们编译运行下,得到结果如下:

C之分支语句(六)

        那么我们看到打印的结果和我们分析的是一致的,那么大家可能对 f2(char i) 函数有疑问,里面为什么要写成 'c' == i呢?在这块我们要写成 i == 'c' 的话也没有错,我们编译运行下结果也是对的。那么为什么要那样写呢?根据我们的工程经验来说,一般新手在写 == 时有时会写成 =。如果我们是这样写 'c' = i 的话,编译的时候就直接报错,那么我们在这时便会很快定位出问题。但是我们要写成 i = 'c',编译照样还是通过的,但结果就不对了。对于新手来说,错误很难排查。我们分别编译下两种情况,看看输出的是什么?图一是 'c' = i 这种情况,图二是 i = 'c' 这种情况。

C之分支语句(六)

                                                                图一

C之分支语句(六)

                                            图二

        那么我们可以看到第二种情况下,编译可以通过,但结果是错的,为什么会输出那样的结果呢?我们再来分析下源代码,无论你输进去的是什么字母,if( i = 'c' ) 这句代码一直为真,因为它是赋值。所以就一直会打印出 Compile,这样的错误对于我们新手来说是不容易排查的。所以建议大家以后写 这种代码时还是遵照规范的格式来写,以最大程度避免错误。

        接下来我们再来讲讲 switch 分支语句。switch 语句对应单个条件分值的情形;case 语句分支必须要有 break,否则会导致分支重叠;default 语句有必要加上,用以处理特殊情况。我们用如下图来表示关系:

C之分支语句(六)

        那么在 case 语句中的值只能是×××或字符型;case 语句的排列是由顺序的:1、按字母或数字顺序排列各条语句;2、正常情况放在前面,异常情况放在后面;3、default 语句只用于处理真正的默认情况。

        那么我们在学习了两种选择语句之后,我们可以用 switch 语句对前面我们写的 if 语句进行改写,f1(int i) 和 f2(char i)代码如下:

void f1(int i)
{
    switch( i < 6 )
    {
        case 1:
            printf("Failed!\n");
            break;
        default:
            switch( (6 <= i) && (i <= 8) )
            {
                case 1:
                    printf("Good!\n");
                    break;
                default:
                    printf("Perfect!\n");
                    break;
            }
    }
}

void f2(char i)
{
    switch( i )
    {
        case 'c':
            printf("Compile\n");
            break;
        case 'd':
            printf("Debug\n");
            break;
        case 'o':
            printf("Object\n");
            break;
        case 'r':
            printf("Run\n");
            break;
        default:
            printf("Unknown\n");
            break;
    }
}

        我们再次进行编译,得到结果如下:

C之分支语句(六)

        我们自己对比前后两次代码,那种写法更加合适,就需要我们自己来选择了。C 语言之所以有提供两种选择语句,就是为了我们用户的自主选择性,在合适的地方用合适的代码。我们可以看到,两种代码都是可以互换的。也就是说同样的功能用 if 语句和 switch 语句都可以实现,这就需要我们自己来选择用哪种方法了。

        我们今天学习了 if 语句和 switch 语句,总结如下:1、if 语句适用于复杂逻辑进行判断的情形中;2、switch 语句适用于对离散值进行判断的情形中;3、if 语句和 switch 语句在功能上可以互换;4、if 语句对于“按片”分支判断的情形更加简洁;5、switch 语句对于多分支判断的情形更加简洁。后面我们会继续对 C 语言的学习。

         欢迎大家一起来学习 C 语言,可以加我QQ:243343083。


新闻名称:C之分支语句(六)
文章源于:http://azwzsj.com/article/ppcgge.html