詳解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ǔ)句是無意義的。默認(rèn)語(yǔ)句無需顯示在末尾;它可以顯示在 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)部塊可以包含帶有初始化的定義,前提是可以訪問到它們 - 即,所有可能的執(zhí)行路徑都不會(huì)繞過它們。使用這些聲明引入的名稱具有局部范圍。例如:
// 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)。
相關(guān)文章
C語(yǔ)言 風(fēng)靡一時(shí)的黃金礦工游戲?qū)崿F(xiàn)流程詳解
《黃金礦工》是一款非常經(jīng)典的游戲。在游戲中,玩家通過不斷挖礦,獲取金子,最終能夠闖入下一關(guān)。在這個(gè)過程中,會(huì)不斷有巖石、煙霧、老鼠來?yè)v亂,甚至還會(huì)出現(xiàn)扛著炸藥包的小老鼠,玩家必須戰(zhàn)勝它們,才能進(jìn)入更深的礦坑2021-11-11
C++ GDI實(shí)現(xiàn)圖片格式轉(zhuǎn)換
GDI+(Graphics Device Interface Plus)是一種用于圖形繪制和圖像處理的應(yīng)用程序編程接口(API),在Windows平臺(tái)上廣泛使用,本文就來介紹一下如何使用GDI實(shí)現(xiàn)圖片格式轉(zhuǎn)換吧2023-12-12
C++中Operator類型強(qiáng)制轉(zhuǎn)換成員函數(shù)解析
轉(zhuǎn)換函數(shù)定義了由<類型說明符1>到<類型說明符2>之間的映射關(guān)系??梢?,轉(zhuǎn)換函數(shù)是用來將一種類型的數(shù)據(jù)轉(zhuǎn)換成為另一種類型2013-09-09
C++?opencv利用grabCut算法實(shí)現(xiàn)摳圖示例
這篇文章主要為大家介紹了C++?opencv利用grabCut算法實(shí)現(xiàn)摳圖的代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
C++ normal_distribution高斯正態(tài)分布函數(shù)的用法示例
高斯分布也稱為正態(tài)分布(normal distribution),常用的成熟的生成高斯分布隨機(jī)數(shù)序列的方法由Marsaglia和Bray在1964年提出,這篇文章主要給大家介紹了關(guān)于C++ normal_distribution高斯正態(tài)分布函數(shù)用法的相關(guān)資料,需要的朋友可以參考下2021-07-07
C語(yǔ)言利用EasyX實(shí)現(xiàn)繪制足球圖案
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言如何利用EasyX繪圖庫(kù)實(shí)現(xiàn)繪制一個(gè)簡(jiǎn)單的足球圖案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-11-11

