人人學編程 C語言入門 單字元輸入、輸出I/O,及緩衝區的概念
摘要: 有時程序需要從多個選擇中選擇一個,可以利用if else if ... else來這樣做,但多數情況下,使用swith語句更加方便。
程序示例 animals.c程序
想要一起學習C++的可以加企鵝裙六四三三九二二二零,裙內有各種資料滿足大家,歡迎加裙
使用switch語句
緊跟在switch後的圓括弧里的表達式被求值。在這裡,它就是剛剛輸入給ch的值。然後程序掃描標籤列表,直到投過到一個與該值相匹配的標籤。然後程序跳到那一行。
要是沒有相匹配的標籤怎麼辦?如果有被標記為default:的標籤行,程序就跳到該行;否則,程序繼續處理跟在switch語句之後的語句。
break語句有什麼作用呢?它導致程序脫離switch語句,跳到switch之後的下一條語句。如果沒有break語句,從相匹配的標籤到switch末尾的每一條語句都將被處理。
順便提一下,break語句用於循環和switch中,而continue僅用於循環。但是,如果switch語句位於一個循環中,則可以把continue用於switch語句的一部分。在這種情況下,就像在其他的循環中一樣,continue導致程序跳過該循環的其餘部分,其中包括switch的其餘部分。
圓括弧中的switch判斷表達式應該具有整數值(包括char類型)。case標籤必須是整型(包括char)常量或者整數常量表達式。不能用變數作為case的標籤。
因而switch結構是這樣的:
switch(integer expression)
{
case constant1:
statements --可選
case constant2:
deafult:
}
只讀取一行的首字元
animals.c的另一個特點是它讀取輸入的方法。在運行示例中您可能已經注意到,當輸入dab時,僅僅處理了第一個字元。這種特性在期望響應單字元的互動式程序中通常很合適。產生這種動作的是下面的代碼:
while(getchar()!='')
continue; /*跳過輸入行的剩餘部分*/
這個循環從輸入讀取字元,直到出現由回車鍵產生的換行字元。注意,函數返回值沒有被賦給ch,因此字元僅被讀取並丟棄。因為最後一個被丟棄的字元是換行符,所以下一個讀入的字元是下行的首字元。在外層while循環中,由getchar()讀取它並將其值賦給ch。
多重標籤
如程序vowels.c所示,可以對一個給定的語句使用多重case標籤:
程序示例 vowels.c程序
想要一起學習C++的可以加企鵝裙六四三三九二二二零,裙內有各種資料滿足大家,歡迎加裙
假定ch是字母i,則switch語句定位到標籤為case i:的位置。因為沒有break同該標籤相關聯,所以程序流繼續前進到下一個語句,即i_ct++。如果ch是I,程序流就直接定位到那條語句。本質上兩個標籤都指向同一個語句。
在這個特例中,可以通過使用ctype.h系列中的toupper()函數在進行判斷之前將所有的字元轉換為大寫字母來避免使用多標籤。如switch(toupper(ch)),這樣,標籤中只使用對應的大寫字母即可。
switch 和 if else
什麼時候該使用switch,而什麼時候又該使用if else結構呢?
通常是沒有選擇的。如果選擇是基於求一個浮點型變數或表達式的值,就不能使用switch。如果變數必須落入某一個範圍,也不能很方便的使用switch。這樣會更簡單:while (i2)。
然而,如果可以使用switch,程序通常會運行的稍快點,而且佔據較少的代碼。
想要一起學習C++的可以加企鵝裙六四三三九二二二零,裙內有各種資料滿足大家,歡迎加裙


※學編程的小夥伴一定要先學好C語言
※C語言實現文件讀寫
※C語言探索之旅:第一個C語言小遊戲
※如何寫一個簡單的C語言程序——C語言編程彩虹
※C語言函數是什麼?怎麼調用?
TAG:C加加 |