c语言中的分支与循环——易忽略知识点整理

注:本文不介绍分支与循环的基本概念,而是从一些细小的,易忽略的知识点入手,旨在帮助读者加深对分支与循环的理解。

一、悬空else问题

首先我们知道,当if语句要控制2条及以上的语句时,要用{}将执行语句括起来。

那么我们看下面这段代码。

#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==1,条件为false,而不加{}的if只能控制它下面的一条语句,所以if(b==2)不执行,于是执行else,最终打印”haha“。

那么我们看一下实际运行结果。

实际上什么也不输出,这是为什么呢?

原来,这就是悬空else问题,如果有多个if和else,可以记住这样⼀条规则, else 总是跟最接近的if匹配,所以这段代码else会与if(b==2)匹配,它们相当于一个整体,所以这与不加{}的if只能控制它下面的一条语句这条规则并不冲突,所以a==1判断为false之后,嵌套的if  else就没机会执行啦,最终就什么都不输出。

代码改成以下就更容易理解了

#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;
 }

二、goto语句

C语⾔提供了⼀种⾮常特别的语法,就是goto语句和跳转标号,goto语句可以实现在同⼀个函数内跳转到设置好的标号处。

#include <stdio.h>
 int main()
 {
    printf("hehe\n");
    goto next:
    printf("haha\n");
 next:
    printf("跳过了haha的打印\n"); 
    return 0;
 }

goto语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤;但是goto语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出使⽤ goto 就⾮常的⽅便了。

for(...){
    for(...){
        for(...){
            if(disaster)
               goto error;

        }

    }

}
error:
     ......

本来for循环想提前退出得使⽤break,一个break只能跳出一层循环,如果3层循环嵌套就得使⽤3个break 才能跳出循环,所以在这种情况下我们使⽤goto 语句就会更加的快捷。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值