詳解C語言中的switch語句

switch語句格式

switch(表達式)
{
	case 常量表達式1:
			語句
			break;
	case 常量表達式2:
			語句
			break;
		
		.......
		
	case 常量表達式n:
			語句
			break;
	default:
			語句
			break;
}

這個switch語句跟if語句相似,都是分支語句,判斷成立後跳出判斷,若case都不成立就輸出default語句。

這裏需要注意三點:

  1. 表達式結果不能是浮點數。
  2. case後的值不能一樣。
  3. case後的值必須是常量。

例子:

#include <stdio.h>				//頭文件
#include <windows.h>

void Myprint(int x)				//定義函數
{
	switch(++x)					//開始執行判斷,傳入的結果進行自加
	{
	case 3:						//若值爲3輸出結果
		printf("Three \n");		
		break;					//若成立跳出判斷
	case 2:						//若上面判斷不成立進行本次判斷
		printf("Tow \n");		
		break;					//若成立跳出判斷
	case 1:						//同上
		printf("one \n");
		break;					
	default:					//若上列判斷都不成立,輸出下列語句
		printf("This is default! \n");
		break;					//跳出判斷
	
	}
	
	return;						//返回結果
}

void main()						//程序入口
{
	Myprint(2);					//調用函數,傳入參數2

	return;						//程序結束
}

運行結果:
在這裏插入圖片描述

條件合併的寫法

格式:
switch(n)
{
	case1:case2:
		printf("語句");
		break;
	case3:
		printf("語句");
		break;
	default:
		printf("語句");
		break;
}

這裏無論表達式的結果是1還是2,執行的語句都是一樣的,這裏是把這兩個條件合併了,
輸出同一條結果。

這裏舉一個例子,無論參數是3還是4,都會輸出Three:

#include <stdio.h>				//頭文件
#include <windows.h>

void Myprint(int x)				//定義函數
{
	switch(++x)					//開始執行判斷,傳入的結果進行自加
	{
	case 3:	case 4:				//若值爲3或4輸出結果
		printf("Three \n");		
		break;					//若成立跳出判斷
	case 2:						//若上面判斷不成立進行本次判斷
		printf("Tow \n");		
		break;					//若成立跳出判斷
	case 1:						//同上
		printf("one \n");
		break;					
	default:					//若上列判斷都不成立,輸出下列語句
		printf("This is default! \n");
		break;					//跳出判斷
	
	}
	
	return;						//返回結果
}

void main()						//程序入口
{
	Myprint(3);					//調用函數,傳入參數2

	return;						//程序結束
}

運行結果:
在這裏插入圖片描述

break語句

這裏的break語句就是一個跳出函數的語句,當程序運行到break的時候,就會跳出這個函數,下面的語句就不會在執行了,假設忘了寫break,就比較麻煩了。

舉一個例子:

#include <stdio.h>				//頭文件
#include <windows.h>

void Myprint(int x)				//定義函數
{
	switch(x)					//開始執行判斷,傳入的結果進行自加
	{
	case 3:						//若值爲3輸出結果
		printf("Three \n");					
	case 2:						//若上面判斷不成立進行本次判斷
		printf("Tow \n");					
	case 1:						//同上
		printf("one \n");
	default:					//若上列判斷都不成立,輸出下列語句
		printf("This is default! \n");	
	}
	
	return;						//返回結果
}

void main()						//程序入口
{
	Myprint(3);					//調用函數,傳入參數2

	return;						//程序結束
}

這個程序第一次判斷值是不是3,我們傳的值是3,那麼下面判斷是不是2、是不是1的結果會不會執行呢,我們看一下運行結果:
在這裏插入圖片描述
這裏全部都執行了,這裏嵌套的少,嵌套多了,漏洞就很明顯了。

default語句

我們知道當前面的判斷都不成立時,程序就會執行default語句,這裏的default語句與位置無關,把它放到最後僅僅是因爲可讀性更好而已。

例子:

#include <stdio.h>				//頭文件
#include <windows.h>

void Myprint(int x)				//定義函數
{
	switch(++x)					//開始執行判斷,傳入的結果進行自加
	{
	default:					//若下列判斷都不成立,輸出下列語句
		printf("This is default! \n");
		break;					//跳出判斷	
	case 3:	case 4:				//若值爲3或4輸出結果
		printf("Three \n");		
		break;					//若成立跳出判斷
	case 2:						//若上面判斷不成立進行本次判斷
		printf("Tow \n");		
		break;					//若成立跳出判斷
	case 1:						//同上
		printf("one \n");
		break;						
	}
	
	return;						//返回結果
}

void main()						//程序入口
{
	Myprint(4);					//調用函數,傳入參數2

	return;						//程序結束
}

運行結果:
在這裏插入圖片描述

注:如果default在判斷之前,一定要加break,否則就跟上面沒加break的程序一樣,下面的語句也會被無條件執行!

switch語句與if…else語句區別

  1. switch語句只進行等值判斷,而if else可以進行區間判斷。
  2. switch語句的彙編結構遠遠高於if else,在分支條件比較多的時候這種情況愈發明顯。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章