我們在日常生活中難免會(huì)遇到要做選擇的情況,那么在 C 語言中也有做選擇的情況。在這種情況下,我們的代碼又該怎樣寫呢?這時(shí)就可以用到我們的分支語句了。 總體來說,我們在 C 語言中可以經(jīng)常看到兩種分支語句:第一種 if 分支語句,第二章就是 switch 分支語句了。我們先來介紹第一種分支語句,if 分支語句。
創(chuàng)新互聯(lián)主營囊謙網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),囊謙h5微信小程序搭建,囊謙網(wǎng)站營銷推廣歡迎囊謙等地區(qū)企業(yè)咨詢
if 語句用于根據(jù)條件選擇執(zhí)行的語句,那么這時(shí)對(duì)應(yīng)的 else 不能獨(dú)立存在且總是與它最近的 if 相匹配,else 語句后可以接連其他 if 語句,用法如下:

那么在 if 語句中做零值比較的話,我們得注意幾點(diǎn)問題:1、bool 型變量應(yīng)該直接出現(xiàn)于條件中,不要進(jìn)行比較;2、變量和 0 值進(jìn)行比較時(shí),0 值應(yīng)該出現(xiàn)在比較符號(hào)左邊;3、float 型變量不能直接進(jìn)行 0 值比較,需要定義精度。因?yàn)槲覀冎?float 型變量是不精確的,所以不能直接進(jìn)行比較。為了更加形象的說明,我們總結(jié)如下:

下來我們做個(gè)示例對(duì) if 語句進(jìn)行說明,代碼如下:
#include <stdio.h>
void f1(int i)
{
if( i < 6 )
{
printf("Failed!\n");
}
else if( (6 <= i) && (i <= 8) )
{
printf("Good!\n");
}
else
{
printf("Perfect!\n");
}
}
void f2(char i)
{
if( 'c' == i )
{
printf("Compile\n");
}
else if( 'd' == i )
{
printf("Debug\n");
}
else if( 'o' == i )
{
printf("Object\n");
}
else if( 'r' == i )
{
printf("Run\n");
}
else
{
printf("Unknown\n");
}
}
int main()
{
f1(5); // Failed!
f1(7); // Good!
f1(9); // Perfect!
f2('o'); // Object
f2('d'); // Debug
f2('e'); // Unknown
return 0;
}根絕我們之前的分析,打印出來的結(jié)果應(yīng)該和我們分析的一樣,我們編譯運(yùn)行下,得到結(jié)果如下:

那么我們看到打印的結(jié)果和我們分析的是一致的,那么大家可能對(duì) f2(char i) 函數(shù)有疑問,里面為什么要寫成 'c' == i呢?在這塊我們要寫成 i == 'c' 的話也沒有錯(cuò),我們編譯運(yùn)行下結(jié)果也是對(duì)的。那么為什么要那樣寫呢?根據(jù)我們的工程經(jīng)驗(yàn)來說,一般新手在寫 == 時(shí)有時(shí)會(huì)寫成 =。如果我們是這樣寫 'c' = i 的話,編譯的時(shí)候就直接報(bào)錯(cuò),那么我們在這時(shí)便會(huì)很快定位出問題。但是我們要寫成 i = 'c',編譯照樣還是通過的,但結(jié)果就不對(duì)了。對(duì)于新手來說,錯(cuò)誤很難排查。我們分別編譯下兩種情況,看看輸出的是什么?圖一是 'c' = i 這種情況,圖二是 i = 'c' 這種情況。

圖一

圖二
那么我們可以看到第二種情況下,編譯可以通過,但結(jié)果是錯(cuò)的,為什么會(huì)輸出那樣的結(jié)果呢?我們再來分析下源代碼,無論你輸進(jìn)去的是什么字母,if( i = 'c' ) 這句代碼一直為真,因?yàn)樗琴x值。所以就一直會(huì)打印出 Compile,這樣的錯(cuò)誤對(duì)于我們新手來說是不容易排查的。所以建議大家以后寫 這種代碼時(shí)還是遵照規(guī)范的格式來寫,以最大程度避免錯(cuò)誤。
接下來我們再來講講 switch 分支語句。switch 語句對(duì)應(yīng)單個(gè)條件分值的情形;case 語句分支必須要有 break,否則會(huì)導(dǎo)致分支重疊;default 語句有必要加上,用以處理特殊情況。我們用如下圖來表示關(guān)系:

那么在 case 語句中的值只能是×××或字符型;case 語句的排列是由順序的:1、按字母或數(shù)字順序排列各條語句;2、正常情況放在前面,異常情況放在后面;3、default 語句只用于處理真正的默認(rèn)情況。
那么我們在學(xué)習(xí)了兩種選擇語句之后,我們可以用 switch 語句對(duì)前面我們寫的 if 語句進(jìn)行改寫,f1(int i) 和 f2(char i)代碼如下:
void f1(int i)
{
switch( i < 6 )
{
case 1:
printf("Failed!\n");
break;
default:
switch( (6 <= i) && (i <= 8) )
{
case 1:
printf("Good!\n");
break;
default:
printf("Perfect!\n");
break;
}
}
}
void f2(char i)
{
switch( i )
{
case 'c':
printf("Compile\n");
break;
case 'd':
printf("Debug\n");
break;
case 'o':
printf("Object\n");
break;
case 'r':
printf("Run\n");
break;
default:
printf("Unknown\n");
break;
}
}我們再次進(jìn)行編譯,得到結(jié)果如下:

我們自己對(duì)比前后兩次代碼,那種寫法更加合適,就需要我們自己來選擇了。C 語言之所以有提供兩種選擇語句,就是為了我們用戶的自主選擇性,在合適的地方用合適的代碼。我們可以看到,兩種代碼都是可以互換的。也就是說同樣的功能用 if 語句和 switch 語句都可以實(shí)現(xiàn),這就需要我們自己來選擇用哪種方法了。
我們今天學(xué)習(xí)了 if 語句和 switch 語句,總結(jié)如下:1、if 語句適用于復(fù)雜邏輯進(jìn)行判斷的情形中;2、switch 語句適用于對(duì)離散值進(jìn)行判斷的情形中;3、if 語句和 switch 語句在功能上可以互換;4、if 語句對(duì)于“按片”分支判斷的情形更加簡潔;5、switch 語句對(duì)于多分支判斷的情形更加簡潔。后面我們會(huì)繼續(xù)對(duì) C 語言的學(xué)習(xí)。
歡迎大家一起來學(xué)習(xí) C 語言,可以加我QQ:243343083。
當(dāng)前名稱:C之分支語句(六)
本文地址:http://chinadenli.net/article14/ppcgge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、面包屑導(dǎo)航、商城網(wǎng)站、營銷型網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)