前言:最近上完課在宿舍閑來無事,就拿起了C Primer Plus 這本書看,是自己入門編程的第一門語言;看了一些基本語法知識點,最讓我需要總一下的是就是標題所說的這個語法知識點,記得大一的時候去考計算機二級的時候,里面的好多選擇有這個,當時在這里弄暈了,所以想一想,還是總結一下,加深理解與印象。
一、switch語句的用法:
看到這個就讓我想起了在學習五一單片機里的矩陣鍵盤的寫法,就用到了這個,哈哈。嗯,還是先來看一下它的基本結構和用法:
1、格式:
switch (表達式)
{
case 常量表達式1: 語句1;
case 常量表達式2: 語句2;
.......
case 常量表達式n: 語句n;
default : 語句n+1;
}
說明:
第一、所有case后面的常量表達式為便於描述我們姑且稱為標簽,這些標簽都只能是:a、枚舉常量(有些地方叫枚舉元素),b、數值常量,c、字符常量 ,d、常變量,e、宏名中的一種,注意普通變量,枚舉變量不能作為標簽使用的。
第二、swich 后面括號里的"表達式"允許是任何類型。
第三、執行完一個case語句后,流程控制就轉移到下一個case語句繼續執行下去,"case”常量表達式只是起語句標號的作用,並不是在該處進行條件判斷。在執行swtich語句時,根據switch()中表達式的值找到與之匹配的case字句,就從此case 子句開始執行下去,不再進行判斷。
第四、switch 是選擇不是循環,如果在switch語句中出現了break語句,並且該語句的功能只是退出switch語句轉去執行它下面的語句。在switch中出現continue是錯誤的除非switch本身就屬於for或while循環的一部分。
2、下面我們來用代碼來分析:
#include <stdio.h> int main(void) { int val ; printf("請輸入您要進入的樓層: "); scanf("%d",&val); switch(val) { case 1: printf("1層開\n"); break; case 2: printf("2層開\n"); break; case 3: printf("3層開\n"); break; default: printf("沒有按到這一層\n"); break; } return 0; }
演示結果如下(可以看出,只要val等於case后面的常量表達式,就會找到這個case語句進行執行,同時因為有break語句,所以他不會繼續執行下去):
請輸入您要進入的樓層: 2 2層開
二、break語句的用法:
break語句的用法主要要注意以下幾點:
a、break如果用於循環是用來終止循環
b、break如果用於switch ,則是用於終止switch
c、break 不能直接用於if語句,除非if屬於循環內部的一個子句,我們可以看下面一個例子(最后他執行的結果是什么都沒顯示):
#include <stdio.h> int main(void) { int i=0; for(i=0;i<3;++i) { if(3>2) break;// break語句雖然是if內部的語句,但是break終止的卻是外部的for循環語句 printf("hh\n"); } return 0; }
d、在多層循環中,break語句只能終止離他距離最近的那個循環,請看下面的例子:
#include <stdio.h> int main(void) { int i ,j; for(i=0;i<3;++i) { for(j=1;j<4;++j) { break; } printf("同志們好\n"); } return 0; }
輸出結果(距離最近的那個for語句在執行到break語句就結束了這個for循環):
同志們好
同志們好
同志們好
e、在多層switch嵌套中,break只能終止距離它最近的switch語句:
#include <stdio.h> int main(void) { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break;//當x=1的時候就執行最外面那個switch里面的第一個case 語句,然后里面的switch語句中的y=0,就執行case 0,然后到這個break 語句就停止往下執行了。 case 1: b++; break; } break; //執行到這里就停止往下執行了 case 2: a++; b++; break; } printf("the result is %d %d\n",a,b); return 0; }
演示結果:
the result is 1 0
三、continue語句的用法:
它的用法是跳過本次循環余下的語句,轉去判斷是否需要執行下次循環,格式如下:
a、while(表達式)
{
A;
B;
continue;//如果執行該語句,則在執行完該語句后,會執行表達式,語句C和D都會被跳過,不會被執行;
C;
D;
}
b、for( 1 ; 2 ; 3)
{
A;
B;
continue;//如果執行完該語句后,會直接執行表達式3,而不會執行下面的語句C和D;
C;
D;
}
下面來看一個例子:
#include <stdio.h> int main(void) { int i ; char ch ; scanf("%d",&i); printf("i = %d\n",i); while(ch =getchar() != '\n')//這里的意思是判斷輸入的數據是否有換行符,如果有的話停止運行這個while語句,而且這個語句是為了防止用戶輸入了非法數據 continue; int j; scanf("%d",&j); printf("j = %d \n",j); return 0; }
演示結果如下():
1 jkldjk // 1后面的數據不符整形數據類型,所以被丟掉了,所以 i的值為1 i = 1 jkdlajfdkl //這個輸入的是垃圾數值,不符合數據類型,所以輸出j的值為0。 j = 0