詳解C++編程中的條件判斷語(yǔ)句if-else與switch的用法
if-else 語(yǔ)句
控制條件分支。
語(yǔ)法
if ( expression ) statement1 [else statement2]
備注
如果 expression 的值不為零,執(zhí)行 statement1 。如果選項(xiàng) else 存在,如果 expression 的值為零,執(zhí)行 statement2。 表達(dá)式必須是算術(shù)或指針類型,或者必須是定義明確的整型或指針類型轉(zhuǎn)換的類類型。有關(guān)轉(zhuǎn)換器的信息,請(qǐng)參見標(biāo)準(zhǔn)轉(zhuǎn)換。
在兩個(gè)形式的 if 語(yǔ)句和 expression 語(yǔ)句中計(jì)算,可以具有除結(jié)構(gòu)以外的任何值,包括所有副作用。除非 statement 中的一個(gè)包含 break、 continue 或 goto,控件才能從 if 語(yǔ)句傳遞到項(xiàng)目中的下一條語(yǔ)句。
if...else 語(yǔ)句的 else 子句與在沒有相應(yīng)的 else 語(yǔ)句的同一范圍的最接近的前面 if 語(yǔ)句相關(guān)。
為了使此示例可以明確有關(guān) if...else 配對(duì),取消對(duì)大括號(hào)的注釋。
// if_else_statement.cpp #include <stdio.h> int main() { int x = 0; if (x == 0) { printf_s("x is 0!\n"); } else { printf_s("x is not 0!\n"); // this statement will not be executed } x = 1; if (x == 0) { printf_s("x is 0!\n"); // this statement will not be executed } else { printf_s("x is not 0!\n"); } return 0; }
輸出:
x 是 0! x 不是 0!
switch 語(yǔ)句
允許根據(jù)整型表達(dá)式的值在多個(gè)代碼段中進(jìn)行選擇。
語(yǔ)法
switch ( expression ) case constant-expression : statement [default : statement]
備注
expression 必須屬于整型或存在到整型的明確轉(zhuǎn)換的類類型。將按照整型提升中所述的方式執(zhí)行整型提升。
switch 語(yǔ)句體由一系列 case 標(biāo)簽和一個(gè)可選 default 標(biāo)簽組成。 case 語(yǔ)句中的兩個(gè)常量表達(dá)式的計(jì)算結(jié)果不能為同一個(gè)值。 default 標(biāo)簽只能出現(xiàn)一次。標(biāo)記語(yǔ)句不是語(yǔ)法要求,但如果它們不存在,switch 語(yǔ)句是無(wú)意義的。默認(rèn)語(yǔ)句無(wú)需顯示在末尾;它可以顯示在 switch 語(yǔ)句體的任何位置。case 或 default 標(biāo)簽只能顯示在 switch 語(yǔ)句內(nèi)。
每個(gè) case 標(biāo)簽中的 constant-expression 將轉(zhuǎn)換為 expression 類型,并將與 expression 比較是否等效??刂频狡?case constant-expression 與 expression 的值匹配的語(yǔ)句的傳遞。下表中顯示了生成的行為。
switch 語(yǔ)句行為
條件 | 操作 |
---|---|
轉(zhuǎn)換后的值與提升的控制表達(dá)式的值匹配。轉(zhuǎn)換后的值與提升的控制表達(dá)式的值匹配。 | 控制將轉(zhuǎn)移到跟在該標(biāo)簽后面的語(yǔ)句。 |
沒有常量與 case 標(biāo)簽中的常量匹配;default 標(biāo)簽存在。 | 控制將轉(zhuǎn)移到 default 標(biāo)簽。 |
沒有常量與 case 標(biāo)簽中的常量匹配;default 標(biāo)簽不存在。 | 控制將轉(zhuǎn)移到 switch 語(yǔ)句之后的語(yǔ)句。 |
如果找到匹配的表達(dá)式,則后續(xù) case 或 default 標(biāo)簽不會(huì)妨礙控制。 break 語(yǔ)句用于停止執(zhí)行并將控制轉(zhuǎn)移到 switch 語(yǔ)句之后的語(yǔ)句。如果沒有 break 語(yǔ)句,則將執(zhí)行從匹配的 case 標(biāo)簽到 switch 末尾的每個(gè)語(yǔ)句,包括 default。例如:
// switch_statement1.cpp #include <stdio.h> int main() { char *buffer = "Any character stream"; int capa, lettera, nota; char c; capa = lettera = nota = 0; while ( c = *buffer++ ) // Walks buffer until NULL { switch ( c ) { case 'A': capa++; break; case 'a': lettera++; break; default: nota++; } } printf_s( "\nUppercase a: %d\nLowercase a: %d\nTotal: %d\n", capa, lettera, (capa + lettera + nota) ); }
在上面的示例中,如果 c 是大寫 A,則 capa 將遞增。 capa++ 之后的 break 語(yǔ)句會(huì)終止 switch 語(yǔ)句體的執(zhí)行并將控制轉(zhuǎn)移到 while 循環(huán)。如果沒有 break 語(yǔ)句,lettera 和 nota 也將遞增。 case 'a' 的 break 語(yǔ)句也能達(dá)到類似的目的。如果 c 是小寫 a,則 lettera 將遞增,并且 break 語(yǔ)句將終止 switch 語(yǔ)句體。如果 c 不是 a 或 A,則將執(zhí)行 default 語(yǔ)句。
switch 語(yǔ)句的內(nèi)部塊可以包含帶有初始化的定義,前提是可以訪問(wèn)到它們 - 即,所有可能的執(zhí)行路徑都不會(huì)繞過(guò)它們。使用這些聲明引入的名稱具有局部范圍。例如:
// switch_statement2.cpp // C2360 expected #include <iostream> using namespace std; int main(int argc, char *argv[]) { switch( tolower( *argv[1] ) ) { // Error. Unreachable declaration. char szChEntered[] = "Character entered was: "; case 'a' : { // Declaration of szChEntered OK. Local scope. char szChEntered[] = "Character entered was: "; cout << szChEntered << "a\n"; } break; case 'b' : // Value of szChEntered undefined. cout << szChEntered << "b\n"; break; default: // Value of szChEntered undefined. cout << szChEntered << "neither a nor b\n"; break; } }
switch 語(yǔ)句可以嵌套。在這種情況下,case 或 default 標(biāo)簽將與封裝它們的最近的 switch 語(yǔ)句關(guān)聯(lián)。
上一篇:詳解C++編程中表達(dá)式的語(yǔ)義與計(jì)算順序
欄 目:C語(yǔ)言
下一篇:c語(yǔ)言實(shí)現(xiàn)php的trim標(biāo)簽
本文標(biāo)題:詳解C++編程中的條件判斷語(yǔ)句if-else與switch的用法
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2566.html
您可能感興趣的文章
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10深入二叉樹兩個(gè)結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)的詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)- 解析最少換車次數(shù)的問(wèn)題詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解
- 01-10HDOJ 1443 約瑟夫環(huán)的最新應(yīng)用分析詳解
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10如何查看進(jìn)程實(shí)際的內(nèi)存占用情況詳解
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery