C之分支語句(六)
if 語句用於根據條件選擇執行的語句,那麽這時對應的 else 不能獨立存在且總是與它最近的 if 相匹配,else 語句後可以接連其他 if 語句,用法如下:
那麽在 if 語句中做零值比較的話,我們得註意幾點問題:1、bool 型變量應該直接出現於條件中,不要進行比較;2、變量和 0 值進行比較時,0 值應該出現在比較符號左邊;3、float 型變量不能直接進行 0 值比較,需要定義精度。
下來我們做個示例對 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'
圖一
圖二
那麽我們可以看到第二種情況下,編譯可以通過,但結果是錯的,為什麽會輸出那樣的結果呢?我們再來分析下源代碼,無論你輸進去的是什麽字母,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。
C之分支語句(六)