跳轉
前兩種跳轉是發生在循環內部的,也就是說 break(switch),continue 只能出現在循環中。後兩者則沒有限制。
break
break 不能單獨使用
可以和switch一起使用,用於跳出switch。
也可以和循環一起使用,用於跳出循環。
解析
他存在的意義,就是在提前結束當前循環,即跳出當前循環。有點像生活的中“閥”,水閥,電閥一樣,到達某一個條件就會自動放水或停電,所以說,break 通常出現在條件表達式的後面,注意,break 只能跳出一重循環。
語法與流程
代碼演示
#include <stdio.h>
#include <windows.h>
int main()
{
for (int floodLevel = 10; floodLevel < 100; floodLevel += 5)
{
printf("當前水位是%d\n", floodLevel);
if (floodLevel == 95)
break;
Sleep(1000);
}
printf("開閥放水\n");
return 0;
}
運行結果爲:
continue
解析
它存在的意義,在於結束當前本輪循環,進入下一輪循環。有點像生活中的“篩子”只留下滿足條件的,也像海邊撿貝殼的小姑涼,只撿自己喜歡的。所以說,cotinue 通常出現在條件表達式的後面,特點:只能結束當前循環提前進入下一輪循環。
語法和流程
代碼演示
打印[1,100] 以內所有能被 3 整除的數
#include <stdio.h>
#include <windows.h>
int main()
{
for (int i = 0; i <= 100; i++)
{
if (i % 3 != 0)
continue;
printf("%d\n", i);
}
return 0;
}
運行結果爲:
return
跳出當前函數,返回調用。如果當前函數是 main 函數,則該進程結束,等價於 exit()函數,因爲操作系統發起的對 main()的調用,main()函數結束,意味着整個進程/程序的退出。
goto
這是一個不太值得探討的話題,goto 會破壞結構化程序設計流程,它將使程序層次不清,且不易讀,所以慎用。
最早提出,使用 goto 有害的是由荷蘭著名計算機科學家 E.W.Dijkstra(艾茲格·迪傑斯特拉)於 1968 年提出的。
goto 語句,僅能在本函數內實現跳轉,不能實現跨函數跳轉(短跳轉)。但是他在跳出多重循環的時候效率還是蠻高的,再者就是 集中錯誤處理。
代碼演示
#include <stdio.h>
#include <windows.h>
int main()
{
for (int i = 0; i < 1; i++)
{
for (int j = 0; j < 1; j++)
{
for (int k = 0; k < 100; k++)
{
printf(" for(int k=0; k<100; k++)\n");
if (k == 5)
goto Target; //return ;//break;
}
printf("for(int j=0; j<1; j++) \n");
}
Target:
printf("for(int i=0; i<1; i++)\n");
}
}
運行結果爲:
測試 break 能跳出幾層循環結構
代碼演示:
#include <stdio.h>
int main(void)
{
while (1)
{
switch (1)
{
case 1: break;
}
printf(" switch(1)\n");
break;
}
printf(" while(1)\n");
return 0;
}
運行結果爲:
我們可以得出結論:
break一次只能跳出當前一層循環。
return 跳出當前函數。
goto只能在當前函數跳轉。