switch語句用法-switch語句怎么用
switch(x){ (prime(x)){case2:case3:case5:case7:process_prime(x);}else{case4:case6:case8:case9:case10:process_composite(x);}}你能說出它如何執行嗎?switch語句的格式為:switch(條件)語句其中,條件的類型可以是整數類型,枚舉類型,或者類類型(但該類需要有單一的轉換到整數類型或(可以是字符類型,但不能是浮點類型、字符串、指針類型等),語句部分不一定非得是一條復合語句。
因此,switch("123"[2]+(int)3。1);是條合法的switch語句,switch(j)case5:i++;也是條合法的switch語句。
如果switch的語句部分是一條非復合語句,則其內定義的變量作用域,效果上等同于該條語句加上了{}。 如inti=3;switch(i)inti=4;,相當于inti=3;switch(i){inti=4;},因此這并不會導致同一局部域下的重復定義錯誤。
case標號后為一個整數類型的常量表達式,因此inti=3;switch(i){case3:;}合法,而inti=3;switch(3){casei:;}不合法,因為casei:的i不是個靜態表達式。 如果將inti=3;換成constinti=3;則后者在C++中就合法了,但在C中仍然不合法。
原因是C和C++對const的處理不同,在C中,const限定的量是不能直接去修改的,但它本身并不是常量表達式;在C++中,const限定的量,如果其值能在編譯時確定,則其可出現在必須使用常量表達式之處。 同一個switch的各個case標號的值不能夠相互重復。
要注意的是,case標號在實現中是有上限的:C89標準要求至少257個,這保證了ASCII被switch列舉一遍。雖然要求case標號是常量表達式,看起來似乎不是很零活方便(比如對比VB的SelectCase),但是這樣的設計可以保證更高的效率,而效率則是C和C++最為看重的因素。
因為case標號的值是編譯時可確定的整數類型,又因為其不可有重復,因此編譯器可以進行優化。最后要強調的問題是,C++中goto不能從前往后跳過變量定義,因此switch內出現的變量定義語句,最好放在復合語句{}中包起來。
c語言開關語句
第二個問題問得好!第一個個問題是這樣的,switch中有值和case后面的值相等的時候,就執行case那行語句,switch都是從上往下判斷的,C語言中的語句執行流程就是從下往上(別弄糊涂了),所以switch 執行也是一樣的。
不是先執行case0,而是先判斷switch中的值是否為 2 -> 1 -> 0 從上往下依次判斷下來。如果switch里的值為0 的話,就執行case0,好好想下!第二個問題,說實話我以前沒有把default放到case中間編譯過(也不知道編譯器是否報錯),呵呵,雖然這種是無用功,但是對于了解編譯還是有幫助的,反正結果應該是這樣,執行到default后,下面的case都不會執行。
“default是不是不管放哪都是最后執行”,不是這樣的,不管default放到哪兒,順序由上往下執行到default的時候,它就會執行,盡管你后面還有case語句等等,都忽略了!呵呵,說得有點亂,我看你在線,你再問我吧!。
switch語句怎么用啊 具體
switch語句的用法詳解 C語言還提供了另一種用于多分支選擇的switch語句, 其一般形式為:switch(表達式){ case常量表達式1: 語句1; case常量表達式2: 語句2; … case常量表達式n: 語句n; default:語句n+1;} 其語義是:計算表達式的值。
并逐個與其后的常量表達式值相比較,當表達式的值與某個常量表達式的值相等時, 即執行其后的語句,然后不再進行判斷,繼續執行后面所有case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執行default后的語句。
main() { int a; printf("input integer number: "); scanf("%d",&a); switch (a) { case 1:printf("Monday\n"); case 2:printf("Tuesday\n"); case 3:printf("Wednesday\n"); case 4:printf("Thursday\n"); case 5:printf("Friday\n"); case 6:printf("Saturday\n"); case 7:printf("Sunday\n"); default:printf("error\n"); } } 本程序是要求輸入一個數字,輸出一個英文單詞。但是當輸入4之后,卻執行了case4以及以后的所有語句,輸出了Wednesday及以后的所有單詞。
這當然是不希望的。為什么會出現這種情況呢?這恰恰反應了switch語句的一個特點。
在switch語句中,“case 常量表達式”只相當于一個語句標號, 表達式的值和某標號相等則轉向該標號執行,但不能在執行完該標號的語句后自動跳出整個switch 語句,所以出現了繼續執行所有后面case語句的情況。這是與前面介紹的if語句完全不同的,應特別注意。
為了避免上述情況,C語言還提供了一種break語句,專用于跳出switch語句,break 語句只有關鍵字break,沒有參數。在后面還將詳細介紹。
修改例題的程序,在每一case語句之后增加break 語句, 使每一次執行之后均可跳出switch語句,從而避免輸出不應有的結果。 switch 的分支語句一共有 n+1 種,而我們通常希望的都是選擇其中的一個分支來執行,執行完后就結束整個 switch 語句,而繼續執行 switch后面的語句,此時就可以通過在每個分支后加上 break 語句來實現了。
如下:switch (表達式) { case 常量表達式1: 語句1; break; case 常量表達式2: 語句2; break;。
case 常量表達式n: 語句n; break; default: 語句n+1; break; } 加了這個 break 語句后,一旦“常量表達式 x”與“表達式”的值相等了,那么就執行“語句 x”,執行完畢后,由于有了 break 則直接跳出 switch 語句,繼續執行 switch 語句后面的程序了,這樣就可以避免執行不必要的語句。把上面改成下面 main() { int a; printf("input integer number: "); scanf("%d",&a); switch (a) { case 1:printf("Monday\n");break; case 2:printf("Tuesday\n"); break; case 3:printf("Wednesday\n");break; case 4:printf("Thursday\n");break; case 5:printf("Friday\n");break; case 6:printf("Saturday\n");break; case 7:printf("Sunday\n");break; default:printf("error\n"); } } 在使用switch語句時還應注意以下幾點: 在case后的各常量表達式的值不能相同,否則會出現錯誤。
在case后,允許有多個語句,可以不用{}括起來。 各case和default子句的先后順序可以變動,而不會影響程序執行結果。
default子句可以省略不用。
c語言switch語句
執行case 2是因為在switch (x) 中x=1,所以執行case 1,然而case 1 這條語句沒有break,所以switch (x)在執行了case 1之后將繼續往下依次執行case語句,直到碰到break就跳出switch 循環。
對于“a的自加是先執行后在自加,當此程序a自加的時候沒有執行其他語句啊?????? ” 則是你沒看到程序中的語句a++,b++它自加完了以后把值任然是賦值給a,b本身的,而不是賦值給其他變量例如c=a++;z=b++。如果是這樣賦值給別的變量的話那么就很明確了c,z的值將和課本上說得一樣都是自加以前的值 。
也就是說這個程序當中最后printf輸出的是a,b的值,但是a,b在自加過程中值都變化了,就是說相當于語句a=a++,b=b++. 我將你的程序進行了更改,你將兩個程序都運行下然后再對照著看一下就明白為什么a,b的值最后是2和1了,程序如下#include