1. 程式人生 > >c++ switch語句的使用(case 後面可以跟N個語句)

c++ switch語句的使用(case 後面可以跟N個語句)

switch語句在處理多分支語句時是一種清晰結構(相比於一系列的if else if ...),

在一般書上的講解時會給出如下的一般形式

<span style="font-size:18px;">switch(表示式){ 
    case 常量表達式1:  語句1;
    case 常量表達式2:  語句2;
    … 
    case 常量表達式n:  語句n;
    default:  語句n+1;
}</span>
switch後的括號裡面是一個表示式,根據這個表示式返回的值(通常是多值),我們來執行相應的語句,這就是下面

case語句所做的事情,case相當於一個if判斷,所謂的常量表達式n

其實就是switch後面表示式的值。

        當我們看到這個switch語句的一般形式的時候,我們總會產生一系列的疑問:

          (1)switch 語句在實際應用中一般怎麼用?、

          (2)case 後面可以跟幾個語句?

接下來我們來解答這兩個問題:

          (1)在實際中我們習慣在每一個case語句最後加上一個break,跳出switch語句,如果我們不寫break表示式,

那麼程式還是會繼續向下執行,去判斷下一個case,從而浪費時間。當然你也可以利用這個特點來處理一些問題,

就像研發最常跟測試他們說的那句話:“這是特性,不是BUG!”,最後default語句可有可無,具體的選擇看具體的

情況。

          (2)上面的一般形式中case語句後只寫了一個語句,最開始學的時候我特別疑惑,case後的語句只能跟

一個嗎?我有很多語句怎麼辦,我在case語句裡面還有if語句怎麼辦,其實這些擔憂都是沒有必要的,在case

語句後面可以有N多語句,這些語句的書寫跟在正常邏輯下無區別,你在一個函式裡怎麼寫if語句,在這裡就怎麼

寫。下面我給出個具體例子來演示switch語句:


switch(in_temp)
				{
					case 1:
						if (input_num == 0) 
						{
							i--;
						}else
						{
							i--;
	
							grade -= grade / 10;
							// if grade < 0 set grade = 0
							grade = grade > 0 ? grade : 0;
							if (input_num > number)
							{
								printf("Bigger than number\n",input_num);
							}else
							{
								printf("Smaller than number\n",input_num);
							}
						}
						break;
					case 2:
						i--;
						grade -= (grade / 10);
						grade = grade > 0 ? grade : 0;
						// is  even number
						if (input_num % 2 == 0)
						{
							printf("Not prim\n");
						}else
						{
							printf("Is prim\n");
						}
						break;
					case 3:
						i--;
						grade -= (grade / 10);
						grade = grade > 0 ? grade : 0;
						//test the  Prim() function
						//number = 457;
						if (Prim(number))
						{
							int leftn;
							int rightn;
							scanf("%d %d", &leftn, &rightn);
							// output the Prim in [leftn,rightn]
							for (int j = leftn; j <= rightn; ++j)
							{
								/* code */
								if (Prim(j))
								{
									printf("%d ", j);
								}
							}
							printf("\n");
						}else printf("Not \n");
						break;
					case 4:
						i--;

						grade -= (grade / 10);
						grade = grade > 0 ? grade : 0;
						// judge the number can divide by 3
						if (number % 3 == 0)
						{
							/* code */
							printf("can multi by 3\n");
						}else printf("can not multi by 3\n");
						break;
					default: break;
				}

			}


由上面的例子,我們就很清晰的看到了switch語句的應用。

另外還要注意一點:switch(val)裡的引數val,在C++中只能取INT及以下的引數型別(char short等),

想string這些複雜的資料型別是不支援的。

謝謝你的閱讀!

相關推薦

c++ switch語句的使用case 後面可以N語句

switch語句在處理多分支語句時是一種清晰結構(相比於一系列的if else if ...), 在一般書上的講解時會給出如下的一般形式: <span style="font-size:18px;">switch(表示式){ case 常量表達式1:

SQL中的條件判斷語句case when zhen if,ifnull用法

簡介: case具有兩種格式。簡單case函式和case搜尋函式。這兩種方式,可以實現相同的功能。簡單case函式的寫法相對比較簡潔,但是和case搜尋函式相比,功能方面會有些限制,比如寫判定式。還有一個需要注重的問題,case函式只返回第一個符合條件的值,剩下的case部分將會被自動忽略。

a+aa+aaa+aaaa+aaaaa+......+aaaaana,java大數比c更簡單

開胃話:每次遇到大數的計算都沒來得及整理,今天覺得有必要以一道例題來總結一下了,c中一般都是用字串來解決的,而java中就可以用BigInteger來解決了,大家可以看看下面連結的這篇部落格,寫的比較完善的: https://blog.csdn.net/dongchengrong/art

多分支語句case

環境配置: 測試指令碼:test.sh pattern:模式 式 格局 樣式 case語法: case $1 in pattern1) 語句1 ;; pattern2) 語句2 ;;

【NCRE】---拼接SQL語句Case....When語句

#region 將答案和分數更新到資料庫中 李少然 2015年12月26日10:09:07 /// <summary> /// 將答案和分數更新到資料庫中 /// </summary> /// <param na

按月統計訂單數量報表SQL語句CASE 和DECODE的使用

本文主要是使用CASE 和DECODE實現按月統計訂單數量,通過此示例希望能幫助讀者理解CASE和DECODE在ORCALE中的使用。 1.使用CASE實現: 按 Ctrl+C 複製程式碼 按 Ctrl+C 複製程式碼 這是一條按月統計每個OPERATING_WAREHOUSE_CODE訂單數量的SQL

SQL中的條件判斷語句case when zhen用法

簡介: case具有兩種格式。簡單case函式和case搜尋函式。這兩種方式,可以實現相同的功能。簡單case函式的寫法相對比較簡潔,但是和case搜尋函式相比,功能方面會有些限制,比如寫判定式。還有一個需要注重的問題,case函式只返回第一個符合條件的值,剩下的case

C#流程控制語句--叠代語句while,do....while, for , foreach

語句 dash rgs sum 換行 pac 定義 奇數 就會 叠代語句:有的時候,可能需要多次執行同一塊代碼。函數中的第一個語句先執行,接著是第二個語句,依此類推。 叠代語句:while(先檢查後執行) while(條件表達式 bool類型) { 代碼語句

thinkPHP輸出sql語句3.2和5.0通用

blog dump bsp where select() div 5.0 lec asd //5.0$qwe = db::table(‘think_user‘)->where(‘id‘,1)->fetchsql()->column(‘name‘);  d

MySQL學習——SQL查詢語句連接查詢&子查詢

例如 必須 創建 clas 在一起 另一個 記錄 any 操作 一:連接查詢:   連接查詢是將倆個或者倆個以上的表按照某個條件連接起來,從中選擇需要的數據,連接查詢同時查詢倆個或者倆個以上的表時使用,當不同的表中存在表示相同意義的字段時,可以通過該字段來連接這幾個表,例如

js獲取n分鐘n小時或n或前的時間日期

atd 格式 format pos 根據 get 標題 設置 pre   標題有點繞,其實意思就是根據系統當前時間,獲取n分鐘或n小時或n個月後的時間。   例如:當前時間下,獲取10分鐘後的時間。 var date=new Date(); //1. js獲

python3-開發進階 heapq模塊如何查找最大或最小的N元素

div lam 優勢 排序 portfolio res 函數 多個 items 一、怎樣從一個集合中獲得最大或者最小的 N 個元素列表?   heapq 模塊有兩個函數:nlargest() 和 nsmallest() 可以完美解決這個問題。 import heap

牛客多校3 C-Shuffle Cardsrope大法解決數組分塊

always href dict sil however cli ++ gic -s Shuffle Cards 鏈接:https://www.nowcoder.com/acm/contest/141/C來源:牛客網 時間限制:C/C++ 1秒,其他語言2秒 空間

Linux C---檔案操作fopen、fwrite、fread等的許可權問題

C語言中對檔案進行操作必須開啟檔案,開啟檔案主要涉及到fopen函式。 fopen函式的原型為: FILE* fopen(const char *path,const char *mode) 其中path為檔案路徑,mode為開啟方式1)對於檔案路徑,只需注意若未明確給出絕對路徑,則

線性表及其應用C語言實現資料結構複習最全筆記

一、順序表的表示與實現 1.線性表的順序結構定義 #define LIST_INIT_SIZE 100 //線性表儲存空間的初始分配量 #define LISTINCREMENT 10 //線性表儲存空間的分配增量 typedef struct { ElemType* el

C程式設計--指標用“ 函式 ”對“ 陣列 ” 進行操作

函式運算元組 說明:如果有一個實引數組,想要在函式中改變此陣列中的元素的值,實參與形參的對應關係有以下4種情況: 1、實參:陣列名 ;; 形參:陣列名 2、實參:陣列名 ;; 形參:指標變數 3、實參:指標變數;; 形參:指標變數 4、實參:指標變

C程式設計--指標對 “ 陣列 ” 進行輸入輸出操作

指標引用陣列元素 方法一、下標法 : 如a[i]形式 方法二、指標法 : 如*(a+i)、*(p+i)形式。其中a是陣列名,p是指向陣列元素的指標變數 ** 問題:有一個整形陣列a,有10個元素,要求輸出陣列中的全部元素** 下標法

C - Dungeon Master 第一道queue實現的BFS

#include<cstdio>#include<queue>#include<cstring>using namespace std;char a[35][35][35];int vis[35][35][35];int ob[6][3]={{-1,0,0},{1,0,0}

c++三大特性繼承,封裝,多型及過載與多型的區別。

    封裝可以隱藏實現細節,使得程式碼模組化,繼承可以擴充套件已存在的模組,它們目的都是為了:程式碼重用。而多型是為了實現另一個目的:介面重用。     封裝是面向物件的特徵之一,是物件和類概念的主要特性。封裝是把過程和資料包圍起來,

C程式設計案例二分法求方程的根

原理 設函式f(x)在[a,b]上連續,且f(a)*f(b)<0,則表明f(x)在[a,b]上至少有一個零點。 微積分中的介值定理。然後通過二分割槽間,縮小區間範圍,當小到一定的精確度的時候,這個x就是我們所求的近似根了。 問題描述: 用二分法求下面方程在區間