前言:最近上完課在宿舍閒來無事,就拿起了C Primer Plus 這本書看,是本身入門編程的第一門語言;看了一些基本語法知識點,最讓我須要總一下的是就是標題所說的這個語法知識點,記得大一的時候去考計算機二級的時候,裏面的好多選擇有這個,當時在這裏弄暈了,因此想想,仍是總結一下,加深理解與印象。編程
1、switch語句的用法:學習
看到這個就讓我想起了在學習五一單片機裏的矩陣鍵盤的寫法,就用到了這個,哈哈。嗯,仍是先來看一下它的基本結構和用法:spa
一、格式:code
switch (表達式)blog
{get
case 常量表達式1: 語句1;it
case 常量表達式2: 語句2;io
.......for循環
case 常量表達式n: 語句n;入門
default : 語句n+1;
}
說明:
第1、全部case後面的常量表達式爲便於描述咱們姑且稱爲標籤,這些標籤都只能是:a、枚舉常量(有些地方叫枚舉元素),b、數值常量,c、字符常量 ,d、常變量,e、宏名中的一種,注意普通變量,枚舉變量不能做爲標籤使用的。
第2、swich 後面括號裏的"表達式"容許是任何類型。
第3、執行完一個case語句後,流程控制就轉移到下一個case語句繼續執行下去,"case」常量表達式只是起語句標號的做用,並非在該處進行條件判斷。在執行swtich語句時,根據switch()中表達式的值找到與之匹配的case字句,就今後case 子句開始執行下去,再也不進行判斷。
第4、switch 是選擇不是循環,若是在switch語句中出現了break語句,而且該語句的功能只是退出switch語句轉去執行它下面的語句。在switch中出現continue是錯誤的除非switch自己就屬於for或while循環的一部分。
二、下面咱們來用代碼來分析:
#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層開
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
3、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