天天看點

C語言--break、continue、return和goto

1、break:

    break 語句,它不僅可以跳出“循環體”,還可以跳出switch語句。同時,break 也隻能用于這兩種情況。break 語句不能用于循環語句和 switch 語句之外的任何其他語句中。

    break是用于永久終止循環。即不執行本次循環中break後面的語句,直接跳出循環。

    不管是for循環,還是while循環,或者是do…while循環,都可以用break 跳出來,但是break隻能跳出一層循環。當有多層循環嵌套的時候,break隻能跳出“包裹”它的最裡面的那一層循環,無法一次跳出所有循環。    

    同樣,在多層switch嵌套的程式中,break也隻能跳出其所在的距離它最近的switch。

2、continue:

    continue是用于終止本次循環。即本次循環中continue後面的代碼不執行,進行下一次循環的入口判斷。

3、return:

    return關鍵字并不是專門用于跳出循環的,return的功能是結束一個函數。 一旦在循環體内執行到一個return語句,return語句将會結束該函數,循環自然也随之結束。與continue和break不同的是,return直接結束整個函數,不管這個return處于多少層循環之内。     

4、goto:

    goto 語句是一種無條件流程跳轉語句,goto可以跳出多重循環,标号隻是标号,程式到标号位置正常執行。标号僅僅起到一個辨別作用,程式順序執行時,标号仿佛不存在。并不是隻有調用了goto标号,然後程式跳到标号處,進而觸發标号下邊的代碼開始運作。    continue和break的差別

        continue語句和break語句的差別是,continue 語句隻結束本次循環,而不是終止整個循環。break 語句則是結束整個循環過程,不再判斷執行循環的條件是否成立。而且,continue 隻能在循環語句中使用,即隻能在 for、while 和 do…while 中使用,除此之外 continue 不能在任何語句中使用。

        continue不能在switch中使用,除非switch 在循環體中。此時 continue 表示的也是結束循環體的本次循環,跟 switch 也沒有任何關系。

    goto語句建議

        1) 使用goto語句隻能goto到同一函數内,而不能從一個函數裡goto到另外一個函數裡。

        2) 使用goto語句在同一函數内進行goto時,goto的起點應是函數内一段小功能的結束處,goto的目的label處應是函數内另外一段小功能的開始處。

        3) 不能從一段複雜的執行狀态中的位置goto到另外一個位置,比如,從多重嵌套的循環判斷中跳出去就是不允許的。

        4)應該避免向兩個方向跳轉。這樣最容易導緻"面條代碼"。

程式測試部分:

    1、break測試程式:

#include<stdio.h>
    /**
     *********************************************************************************
     * @file             main.c
     * @auther           BA-li
     * @version          1.1.1
     * @data             2018-12-26 16:04:41
     * @brief            break和continue功能測試函數
     * @param            none
     * @retval           none
     * @attention
     *********************************************************************************
     */
    int
    main(void)
    {
        printf("This is a break/continue/goto/return test!!!\r\n");

        int i = 0;

        while (i < 10)
        {
            i = i + 1;

            if (i == 5)
                break;

            printf("%d  ",i);

        }

        return 0;
    }
    /** 程式輸出結果:
     *****************************************
     * This is a break/continue/goto/return test!!!
     * 1  2  3  4
     *****************************************
     */
           

    2、continue測試程式:

 #include<stdio.h>
    /**
     *********************************************************************************
     * @file             main.c
     * @auther           BA-li
     * @version          1.1.1
     * @data             2018-12-26 16:04:41
     * @brief            break和continue功能測試函數
     * @param            none
     * @retval           none
     * @attention
     *********************************************************************************
     */
    int
    main(void)
    {
        printf("This is a break/continue/goto/return test!!!\r\n");

        int i = 0;

        while (i < 10)
        {
            i = i + 1;

            if (i == 5)
                continue;

            printf("%d  ",i);

        }

        return 0;
    }
    /** 程式輸出結果:
     *****************************************
     * This is a break/continue/goto/return test!!!
     * 1  2  3  4  6  7  8  9  10
     *****************************************
     */
     
           

    3、return測試程式:

 #include<stdio.h>
    /**
     *********************************************************************************
     * @file             main.c
     * @auther           BA-li
     * @version          1.1.1
     * @data             2018-12-26 16:04:41
     * @brief            return功能測試函數
     * @param            none
     * @retval           none
     * @attention
     *********************************************************************************
     */
    int
    main(void)
    {
        printf("This is a break/continue/goto/return test!!!\r\n");

        int i = 0;

        while (i < 10)
        {
            i = i + 1;

            if (i == 5)
                return 0;

            printf("%d  ",i);

        }

        return 0;
    }
    /** 程式輸出結果:
     *****************************************
     * This is a break/continue/goto/return test!!!
     * 1  2  3  4
     *****************************************
     */
    
           

4、goto測試程式:

 #include<stdio.h>
    /**
     *********************************************************************************
     * @file             main.c
     * @auther           BA-li
     * @version          1.1.1
     * @data             2018-12-26 16:04:41
     * @brief            goto功能測試函數
     * @param            none
     * @retval           none
     * @attention
     *********************************************************************************
     */
    int
    main(int argc, char **argv)
    {
        int i = 1;

        while(1)
        {
            printf("while(1) \r\n");
            while(i++)
            {
                printf("while(i++) i = %d\n",i);
                if(i > 3)
                {
                    goto program_exti;
                }
            }
        }
    program_exti:
        printf("程式結束\n");
        return 0;
    }
    /**程式輸出結果
     ************************************
     *while(1)
     *while(i++) i = 2
     *while(i++) i = 3
     *while(i++) i = 4
     *程式結束
     ************************************
     */
           
#include <stdio.h>
int
main(int argv, char ** argc)
{
    unsigned char a = 2;

    if (a == 1) {
        goto test1;
    } else if (a == 2) {
        goto test2;
    } else if (a == 3){
        goto test3;
    } else {
        goto test4;
    }

    test1:
        printf("test1\r\n");
    test2:
        printf("test2\r\n");
    test3:
        printf("test3\r\n");
    test4:
        printf("test4\r\n");

    printf("random test\r\n");

}
/** output result
*******************************
test2
test3
test4
random test
*******************************
 */
           

繼續閱讀