鍍金池/ 教程/ C/ C語(yǔ)言switch語(yǔ)句
C語(yǔ)言printf()和scanf()函數(shù)
C語(yǔ)言strlen()函數(shù)
C語(yǔ)言指針
C語(yǔ)言ftell()函數(shù)
C語(yǔ)言#ifdef指令
C語(yǔ)言程序執(zhí)行流程
C語(yǔ)言歷史
C語(yǔ)言fprintf()和fscanf()函數(shù)
C語(yǔ)言#define指令
C語(yǔ)言#if指令
C語(yǔ)言將數(shù)組傳遞給函數(shù)
C語(yǔ)言指針的指針
C語(yǔ)言rewind()函數(shù)
C語(yǔ)言常量
C語(yǔ)言strcat()函數(shù)
C語(yǔ)言#ifndef指令
C語(yǔ)言continue語(yǔ)句
C語(yǔ)言注釋
C語(yǔ)言#include指令
C語(yǔ)言類型轉(zhuǎn)換
C語(yǔ)言strcpy()函數(shù)
C語(yǔ)言strlwr()函數(shù)
C語(yǔ)言while循環(huán)
C語(yǔ)言字符串
C語(yǔ)言strrev()函數(shù)
C語(yǔ)言gets()和puts()函數(shù)
C語(yǔ)言文件處理
C語(yǔ)言存儲(chǔ)分類
C語(yǔ)言運(yùn)算符
C語(yǔ)言數(shù)據(jù)類型
C語(yǔ)言strcmp()函數(shù)
C語(yǔ)言VS開(kāi)發(fā)環(huán)境安裝
C語(yǔ)言轉(zhuǎn)義序列
C語(yǔ)言第一個(gè)程序
C語(yǔ)言變量
C語(yǔ)言goto語(yǔ)句
C語(yǔ)言預(yù)處理器指令
C語(yǔ)言指針?biāo)阈g(shù)運(yùn)算
C語(yǔ)言數(shù)學(xué)函數(shù)
C語(yǔ)言二維數(shù)組
C語(yǔ)言for循環(huán)
C語(yǔ)言命令行參數(shù)
C語(yǔ)言通過(guò)值和引用函數(shù)
C語(yǔ)言fputs()和fgets()函數(shù)
C語(yǔ)言do-while循環(huán)
C語(yǔ)言結(jié)構(gòu)體數(shù)組
C語(yǔ)言循環(huán)
C語(yǔ)言#pragma指令
C語(yǔ)言關(guān)鍵字
C語(yǔ)言#error指令
C語(yǔ)言聯(lián)合體
C語(yǔ)言特點(diǎn)
C語(yǔ)言break語(yǔ)句
C語(yǔ)言遞歸
C語(yǔ)言函數(shù)
C語(yǔ)言結(jié)構(gòu)體
C語(yǔ)言switch語(yǔ)句
C語(yǔ)言結(jié)構(gòu)體嵌套
C語(yǔ)言fputc()和fgetc()函數(shù)
C語(yǔ)言fseek()函數(shù)
C語(yǔ)言字符串函數(shù)
C語(yǔ)言if-else語(yǔ)句
C語(yǔ)言教程
C語(yǔ)言宏
C語(yǔ)言數(shù)組
C語(yǔ)言strupr()函數(shù)
C語(yǔ)言#undef指令

C語(yǔ)言switch語(yǔ)句

C語(yǔ)言中的switch語(yǔ)句用于從多個(gè)條件執(zhí)行代碼。 就像if else-if語(yǔ)句一樣。

C語(yǔ)言中switch語(yǔ)句的語(yǔ)法如下:

switch(expression){    
case value1:    
 //code to be executed;    
 break;  //optional  
case value2:    
 //code to be executed;    
 break;  //optional  
......    

default:     
 code to be executed if all cases are not matched;    
}

C語(yǔ)言中switch語(yǔ)句的規(guī)則如下 -

  1. switch表達(dá)式必須是整數(shù)或字符類型。
  2. case值必須是整數(shù)或字符常量。
  3. case值只能在switch語(yǔ)句中使用。
  4. switch case中的break語(yǔ)句不是必須的。這是一個(gè)可選項(xiàng)。 如果在switch case中沒(méi)有使用break語(yǔ)句,則匹配case值后將執(zhí)行所有后的語(yǔ)句。它被稱為通過(guò)C語(yǔ)言switch語(yǔ)句的狀態(tài)。

我們?cè)囍ㄟ^(guò)例子來(lái)理解它。假設(shè)有以下變量及賦值。

int x,y,z;  
char a,b;  
float f;
有效的Switch 無(wú)效的Switch 有效的Case 無(wú)效的Case
switch(x) switch(f) case 3; case 2.5;
switch(x>y) switch(x+2.5) case ‘a(chǎn)’; case x;
switch(a+b-2) case 1+2; case x+2;
switch(func(x,y)) case ‘x’>’y’; case 1,2,3;

C語(yǔ)言中的switch語(yǔ)句的流程圖 -

我們來(lái)看一個(gè)簡(jiǎn)單的C語(yǔ)言switch語(yǔ)句示例。創(chuàng)建一個(gè)源文件:switch-statment.c,其代碼如下 -

#include<stdio.h>  
#include<conio.h>  
void main() {
    int number = 0;

    printf("Enter a number:");
    scanf("%d", &number);

    switch (number) {
    case 10:
        printf("number is equals to 10\n");
        break;
    case 50:
        printf("number is equal to 50\n");
        break;
    case 100:
        printf("number is equal to 100\n");
        break;
    default:
        printf("number is not equal to 10, 50 or 100\n");
    }
}

執(zhí)行上面示例代碼,得到以下結(jié)果 -

Enter a number:88
number is not equal to 10, 50 or 100

執(zhí)行第二次,結(jié)果如下 -

Enter a number:50
number is equal to 50
請(qǐng)按任意鍵繼續(xù). . .

switch語(yǔ)句直通到尾

在C語(yǔ)言中,switch語(yǔ)句是通過(guò)的,這意味著如果在switch case中不使用break語(yǔ)句,則匹配某個(gè)case之后的所有的case都將被執(zhí)行。

我們來(lái)試試通過(guò)下面的例子來(lái)了解switch語(yǔ)句的狀態(tài)。創(chuàng)建一個(gè)源文件:switch-fall-through.c,其代碼如下所示 -

#include<stdio.h>  
#include<conio.h>  
void main() {
    int number = 0;

    printf("enter a number:");
    scanf("%d", &number);

    switch (number) {
    case 10:
        printf("number is equals to 10\n");
    case 50:
        printf("number is equal to 50\n");
    case 100:
        printf("number is equal to 100\n");
    default:
        printf("number is not equal to 10, 50 or 100\n");
    }
}

執(zhí)行上面示例代碼,得到以下結(jié)果 -

enter a number:10
number is equals to 10
number is equal to 50
number is equal to 100
number is not equal to 10, 50 or 100
請(qǐng)按任意鍵繼續(xù). . .

從上面的輸出結(jié)果中,可以清楚地看到,當(dāng)匹配 number = 10 之后,由于沒(méi)有break語(yǔ)句,其它后面的語(yǔ)句也打印執(zhí)行了。