C語言程序流程設計之跳轉【程序流程設計】(14)

跳轉

前兩種跳轉是發生在循環內部的,也就是說 break(switch),continue 只能出現在循環中。後兩者則沒有限制。

break

break 不能單獨使用
可以和switch一起使用,用於跳出switch。
也可以和循環一起使用,用於跳出循環。

解析

他存在的意義,就是在提前結束當前循環,即跳出當前循環。有點像生活的中“閥”,水閥,電閥一樣,到達某一個條件就會自動放水或停電,所以說,break 通常出現在條件表達式的後面,注意,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;
}

運行結果爲:

break代碼演示運行結果

continue

解析

它存在的意義,在於結束當前本輪循環,進入下一輪循環。有點像生活中的“篩子”只留下滿足條件的,也像海邊撿貝殼的小姑涼,只撿自己喜歡的。所以說,cotinue 通常出現在條件表達式的後面,特點:只能結束當前循環提前進入下一輪循環。

語法和流程

continue語法及流程

代碼演示

打印[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;
}

運行結果爲:
continue代碼演示運行結果

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");
	}
}

運行結果爲:

goto代碼演示運行結果

測試 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 能跳出幾層循環結構

我們可以得出結論:
break一次只能跳出當前一層循環。
return 跳出當前函數。
goto只能在當前函數跳轉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章