switch語句格式
switch(表達式)
{
case 常量表達式1:
語句
break;
case 常量表達式2:
語句
break;
.......
case 常量表達式n:
語句
break;
default:
語句
break;
}
這個switch語句跟if語句相似,都是分支語句,判斷成立後跳出判斷,若case都不成立就輸出default語句。
這裏需要注意三點:
- 表達式結果不能是浮點數。
- case後的值不能一樣。
- 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語句區別
- switch語句只進行等值判斷,而if else可以進行區間判斷。
- switch語句的彙編結構遠遠高於if else,在分支條件比較多的時候這種情況愈發明顯。