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
*******************************
*/