您好,登錄后才能下訂單哦!
我們在日常生活中難免會遇到要做選擇的情況,那么在 C 語言中也有做選擇的情況。在這種情況下,我們的代碼又該怎樣寫呢?這時就可以用到我們的分支語句了。 總體來說,我們在 C 語言中可以經常看到兩種分支語句:第一種 if 分支語句,第二章就是 switch 分支語句了。我們先來介紹第一種分支語句,if 分支語句。
if 語句用于根據條件選擇執行的語句,那么這時對應的 else 不能獨立存在且總是與它最近的 if 相匹配,else 語句后可以接連其他 if 語句,用法如下:
那么在 if 語句中做零值比較的話,我們得注意幾點問題:1、bool 型變量應該直接出現于條件中,不要進行比較;2、變量和 0 值進行比較時,0 值應該出現在比較符號左邊;3、float 型變量不能直接進行 0 值比較,需要定義精度。因為我們知道 float 型變量是不精確的,所以不能直接進行比較。為了更加形象的說明,我們總結如下:
下來我們做個示例對 if 語句進行說明,代碼如下:
#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; }
根絕我們之前的分析,打印出來的結果應該和我們分析的一樣,我們編譯運行下,得到結果如下:
那么我們看到打印的結果和我們分析的是一致的,那么大家可能對 f2(char i) 函數有疑問,里面為什么要寫成 'c' == i 呢?在這塊我們要寫成 i == 'c' 的話也沒有錯,我們編譯運行下結果也是對的。那么為什么要那樣寫呢?根據我們的工程經驗來說,一般新手在寫 == 時有時會寫成 =。如果我們是這樣寫 'c' = i 的話,編譯的時候就直接報錯,那么我們在這時便會很快定位出問題。但是我們要寫成 i = 'c',編譯照樣還是通過的,但結果就不對了。對于新手來說,錯誤很難排查。我們分別編譯下兩種情況,看看輸出的是什么?圖一是 'c' = i 這種情況,圖二是 i = 'c' 這種情況。
圖一
圖二
那么我們可以看到第二種情況下,編譯可以通過,但結果是錯的,為什么會輸出那樣的結果呢?我們再來分析下源代碼,無論你輸進去的是什么字母,if( i = 'c' ) 這句代碼一直為真,因為它是賦值。所以就一直會打印出 Compile,這樣的錯誤對于我們新手來說是不容易排查的。所以建議大家以后寫 這種代碼時還是遵照規范的格式來寫,以最大程度避免錯誤。
接下來我們再來講講 switch 分支語句。switch 語句對應單個條件分值的情形;case 語句分支必須要有 break,否則會導致分支重疊;default 語句有必要加上,用以處理特殊情況。我們用如下圖來表示關系:
那么在 case 語句中的值只能是×××或字符型;case 語句的排列是由順序的:1、按字母或數字順序排列各條語句;2、正常情況放在前面,異常情況放在后面;3、default 語句只用于處理真正的默認情況。
那么我們在學習了兩種選擇語句之后,我們可以用 switch 語句對前面我們寫的 if 語句進行改寫,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; } }
我們再次進行編譯,得到結果如下:
我們自己對比前后兩次代碼,那種寫法更加合適,就需要我們自己來選擇了。C 語言之所以有提供兩種選擇語句,就是為了我們用戶的自主選擇性,在合適的地方用合適的代碼。我們可以看到,兩種代碼都是可以互換的。也就是說同樣的功能用 if 語句和 switch 語句都可以實現,這就需要我們自己來選擇用哪種方法了。
我們今天學習了 if 語句和 switch 語句,總結如下:1、if 語句適用于復雜邏輯進行判斷的情形中;2、switch 語句適用于對離散值進行判斷的情形中;3、if 語句和 switch 語句在功能上可以互換;4、if 語句對于“按片”分支判斷的情形更加簡潔;5、switch 語句對于多分支判斷的情形更加簡潔。后面我們會繼續對 C 語言的學習。
歡迎大家一起來學習 C 語言,可以加我QQ:243343083。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。