c语言switch scanf语句,C语言中scanf函数与switch语句
----------------switch----------------
1)使用格式
switch(表達(dá)式){
case 常量表達(dá)式1: 語(yǔ)句1;
case 常量表達(dá)式2: 語(yǔ)句2; ...
case 常量表達(dá)式n: 語(yǔ)句n;
default: 語(yǔ)句n+1;
}
判斷月份代碼實(shí)現(xiàn)
int main(int argc, const char * argv[]) {
//定義變量
int month;
//提示用戶輸入一個(gè)月份
printf("請(qǐng)輸入一個(gè)月份,范圍1-12之間:
");
//接收用戶輸入的月份
scanf("%d",&month);
//校驗(yàn)
if (month<1 || month>12) {
printf("月份不合法!
");
return 0;
}
//判斷處于哪個(gè)季節(jié)
switch (month) {
case 12:
case 1:
case 2:
printf("冬季,男人最討厭的季節(jié)
");
break;
case 3:
case 4:
case 5:
printf("春季,一個(gè)充滿生機(jī)的季節(jié)
");
break;
case 6:
case 7:
case 8:
printf("夏季,一個(gè)充滿黑絲的季節(jié)
");
break;
case 9:
case 10:
case 11:
printf("秋季,一個(gè)不安分的季節(jié)
");
break;
}
return 0;
}
其語(yǔ)義是:計(jì)算表達(dá)式的值。 并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表 達(dá)式的值相等時(shí), 即執(zhí)行其后的語(yǔ)句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語(yǔ)句。如 表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語(yǔ)句。
1、switch語(yǔ)句的表達(dá)式類型
1)可以放一個(gè)整型的變量 int num = 10;switch (num)
2)可以放一個(gè)整形常量? switch (10)
3)可以放一個(gè)返回值是整型的表達(dá)式 ? switch (5+5),num = 5+5
4)還可以放可以轉(zhuǎn)換為int類型的表達(dá)式 switch ('a'+'a')
----------case語(yǔ)句的穿透問(wèn)題
case語(yǔ)句執(zhí)行的過(guò)程中,一旦進(jìn)入某個(gè)分支后就會(huì)一直執(zhí)行到switch結(jié)束。
為了避免上述情況,C語(yǔ)言還提供了一種break語(yǔ)句,專用于跳出switch語(yǔ)句.
---------if分支和switch分支轉(zhuǎn)換
if語(yǔ)句不一定能轉(zhuǎn)換成switch語(yǔ)句,switch語(yǔ)句一定能轉(zhuǎn)換成if語(yǔ)句
if(表達(dá)式)-------case 常量表達(dá)式
---------if分支和switch分支的選擇
1)分支比較多且無(wú)法窮盡或進(jìn)行大量列舉 時(shí)最好用if
2)如果分支數(shù)量不是很多,但是使用if代碼代碼量比較大的時(shí)候,可以選用switch
if ? ? 可以理解為 ? 判斷語(yǔ)句 ? 判斷性為主
switch? ? ? ? ? ? 選擇語(yǔ)句 ? 選擇性為主
---------switch分支值得注意的地方
表達(dá)式的類型(case語(yǔ)句后的值)必須是整型或可以轉(zhuǎn)變?yōu)檎偷闹?(byte、short、char和int類型)。
整形變量? ? 整形常量 ? 返回值是整形的表達(dá)式 ? 可以裝換為int類型的表達(dá)式
2) 功能代碼部分可以寫任意多句。
3) case語(yǔ)句可以有任意多句,可以不用加括號(hào)“{}”
4) break關(guān)鍵字的意思是中斷,指結(jié)束switch語(yǔ)句,break語(yǔ)句為可選。
-----------case值得注意的地方
0) case語(yǔ)句格式: case? 常量表達(dá)式: (空格和冒號(hào)不能省)
1) case的值1、值2...值n只能為常數(shù)或常量,不能為變量。
2) 如果放表達(dá)式,那么只可以是常量表達(dá)式 case 5+5:
3) default語(yǔ)句的位置可以任意放 功能類似于if語(yǔ)句中的else。但是寫在最上面會(huì)重新一次往下執(zhí)行4) case的穿透問(wèn)題,同樣適用于 default
5) 如果default語(yǔ)句放到 switch語(yǔ)句的最后,可以不加break
如果不是放到最后,是必須加上break的
6) case的值必須是整數(shù),不能為浮點(diǎn)數(shù)。
7) case 語(yǔ)句之后,默認(rèn)的第一句話不能定義定義變量
如果第一句話非要定義,應(yīng)該加上大括號(hào)
----------------scanf函數(shù)(阻塞式函數(shù))----------------
如果使用這個(gè)函數(shù),要包含一個(gè)頭文件 stdio.h
阻塞式的函數(shù):函數(shù)執(zhí)行后,會(huì)等待用戶的輸入,如果用戶不輸入任何內(nèi)容,它會(huì)一直等待
scanf函數(shù)的作用:
從鍵盤接收用戶輸入的內(nèi)容,保存到指定的變量中
scanf函數(shù)的格式:
scanf("格式控制符",輸入項(xiàng)的地址列表);
scanf注意
1。當(dāng)有多個(gè) 輸入項(xiàng)時(shí),各個(gè)地址名之間以逗號(hào)“,”分隔。輸入格式和變量類型要保持一致。
2.scanf函數(shù)當(dāng)遇到回車的時(shí)候,會(huì)結(jié)束執(zhí)行
3、接收單個(gè)變量值的時(shí)候,在輸入值之前,如果我們輸入了空格 回車 tab,都會(huì)被忽略
%d%d,要求我們?cè)阪I盤上輸入的時(shí)候,輸入兩個(gè)整數(shù),并且以空格或者回車隔開(kāi)
4,輸入完第一個(gè)數(shù)以后,如果中間添加了回車 空格 tab 都會(huì)被忽略
5? ? ? %*d按指定格式讀入數(shù)據(jù)但不賦予相應(yīng)的變量,作用是跳過(guò)相應(yīng)的讀入數(shù)據(jù)
%*d過(guò)一個(gè)整數(shù)
6? 此處不允許寫%m.nf,但是%mf是可以
7? 要求輸入分?jǐn)?shù) 確輸入了字符 運(yùn)行結(jié)果 0.00000
scanf運(yùn)行的原理
1)當(dāng)用戶輸入內(nèi)容后,用戶輸入的內(nèi)容會(huì)被存放到scanf的輸入緩沖區(qū)中 然后,
scanf函數(shù)會(huì)根據(jù)格式控制的字符的要求,從輸入緩沖區(qū)依次取它想要的內(nèi)容
如果 從緩沖區(qū)中取得內(nèi)容和和我們的格式要求一致,則把值存放到變量中
如果格式不一致,則不修改變量的值
2)如果scanf緩沖區(qū)中還有內(nèi)容,則scanf不會(huì)提示我們?cè)俅屋斎?、scanf的運(yùn)行原理
總結(jié)
以上是生活随笔為你收集整理的c语言switch scanf语句,C语言中scanf函数与switch语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 7号信令1-6
- 下一篇: TCP的定时器系列 — 保活定时器(有图