c语言case可以判断多个条件吗,case 多个条件
威綸HMI宏指令選擇語句大致分為兩類分別是
if 語句
Case 語句
01
if?語句
if語句用來判斷給定條件是否滿足,根據判斷結果決定是否執行某個操作。
然而if語句在這里大致可以分為3種形式:
1、單一形式的if語句
2、if……else形式語句
3、if語句的多重判斷形式
?單一形式的if語句
1if?number?>?5?then2????TRACE('Result?==?true')3end?if
其流程圖如下:如果number?>?5 的條件成立那么打印預定的字符然后語句結束,如果條件不成立那么什么也不做。
??if……else形式語句
1if?number?>?10?then2????varA?=??varB? ?varC3else4????varA?=??varB?-?varC5end?if
流程圖解釋:?number?>?10?為true時執行varA?=??varB? ?varC?然后結束,當其比較結果為false時執行?varA?=??varB?-?varC?之后結束
??if語句的多重判斷形式
舉一個經典的例子:將一個學生的數學成績歸類為Class A(90<=成績<=100)、Class B(80<=成績<90)、Class C(70<=成績<80)、Class D(60<=成績<70)、Class E(成績<60)。
1macro_command?main() 2short?score 3GetData(score,?'Local_HMI',?LW,?100,?1)//來自HMI的成績數據入口 4if?score?0?or?score?>?100?then
5??? TRACE('input?Error')//如果輸入負數or成績大于100則警告并終止 6else?if?score?>?0?and?score?60?then
7????TRACE('Class?E?%d',score) 8else?if?score?>=?60?and?score?70?then
9????TRACE('Class?D?%d',score)10else?if?score?>=?70?and?score?80?then
11????TRACE('Class?C?%d',score)12else?if?score?>=?80?and?score?90?then
13????TRACE('Class?B?%d',score)14else?if?score?>=?90?and?score?<=?100?then15????TRACE('Class?A?%d',score)16end?if????17end?macro_command
if語句多重判斷形式允許擴充多個條件的判斷,語法結構邏輯緊湊,層層遞進抽絲剝繭,就像剝洋蔥
?模型如下:
上面成績分級的代碼流程圖如下
跑一個仿真
02
Case語句
雖然多重if語句可以替代Case語句,但是在某些時候使用Case語句使代碼具有更好的可讀性,避免了使用過多的if-else語句讓人眼花繚亂。
繼續使用剛才成績分級的的要求用Case選擇語句來實現:
1macro_command?main() 2short?score 3GetData(score,?'Local_HMI',?LW,?100,?1)//獲取分值 4if?score?<=?100?and?score?>=?0?then//驗證輸入分值是否在0~100之間 5????select?case?score?/?10?//比如成績是63分 63/10?= 6.3;由于變量是整型會舍棄小數那么對應的語句就是 Case 6 語句塊 6????case?0 7????case?1 8????case?2 9????case?310????case?411????case?512????????TRACE('Class?E')13????break14????case?615????????TRACE('Class?D')16????break17????case?718????????TRACE('Class?C')19????break20????case?821????????TRACE('Class?B')22????break23????case?924????????TRACE('Class?A')25????break26????case?else//Case?ELSE?如果沒有與上述條件相匹配的則執行該語句塊27????????TRACE('Class?A')28????end?select30else31????TRACE('input?Error?')//輸入錯誤警告32end?if33end?macro_command
模擬視頻
在Case語句中有一些關鍵詞
select?case?;Case語句的開始部分
case?0~case?9;是預設條件?score?的值與條件相等時執行對應的語句塊
case?else;score的內容與之前的預設條件無匹配項則執行case?else的語句
break ;如果語句塊n的后面有break,那么執行完語句塊n就會跳轉到end?select,結束case判斷。如果語句塊后沒有break 那么語句會一直往下執行,直到遇到break或者end?select然后退出Case語句。(上面示例代碼中Case 0 ~ Case4是沒有break語句的,所以會挨個執行直到碰到Case 5 的break才會跳出Case語句)
end?select;Case語句的結束標識
Case語句流程圖如下:
03
Case語句的嵌套形式
既然if語句可以嵌套,那么Case是否可以使用嵌套形式?答案是當然可以。這種用法估計很少有人使用或者少為人知,但是 我們一定要知道。
Case的嵌套與if的嵌套非常相似,下來用一個簡單的例子演示。
示例中有3種產品,每種產品分為A;B;C;D;4個級別(類)通過case嵌套來查詢價格。
1macro_command?main() 2short?Product_ID 3char?class[1]?//StringGet必須使用字符數組變量?其目標數據是來獲取輸入的字符串,如果數組元素只有一個就只會獲取第一個字符,剛好滿足設計需求 4GetData(Product_ID,?'Local_HMI',?LW,?201,?1)//獲取產品ID 5StringGet(class[0],?'Local_HMI',?LW,?300,?1)//以字符形式獲取產品等級? 6 7select?case?Product_ID 8case?1 9????TRACE('case?1')10????select?case?class[0]11????case?'A'12????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 10)13????????break14????case?'B'15????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 30)16????????break17????case?'C'18????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 50)19????????break20????case?'D'21????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 70)22????????break23????case?else//ELSE24????TRACE('not?found?1')25????end?select26break2728case?229????TRACE('case?2')30????select?case?class[0]31????????case?'A'32????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 20)33????????break34????case?'B'35????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 40)36????????break37????case?'C'38????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 60)39????????break40????case?'D'41????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 80)42????????break43????case?else//ELSE44????TRACE('not?found?2')45????end?select46break4748case?349????TRACE('case?3')50????select?case?class[0]51????case?'A'52????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 11)53????????break54????case?'B'55????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 33)56????????break57????case?'C'58????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 55)59????????break60????case?'D'61????????TRACE('Product_%d?class?%c?price?=?%d',Product_ID,class[0],Product_ID*class[0] 77)62????????break63????case?else//ELSE64????TRACE('not?found?3')65????end?select66break67case?else//ELSE68????TRACE('not?found?Product_ID')69end?select70end?macro_command
演示視頻
從這個例子中可以看到case語句的預設條件也可以使用字符,對于HMI這種人機交互工具來說字符有時候比數字更具象一些,能夠使用字符來替代數字是因為ASCII碼本身就是整數,見字符碼表(A=65;B=66;C=67;D=68)
參考文獻(C Primer Plus 第六版 ; C 語言程序設計)
---End---
歷史文章:
威綸觸摸屏宏指令之TRACE函數
威綸觸摸屏宏指令[環境 數據類型 運算符 Diagnoser]
威綸觸摸屏畫面切換實例
維綸觸摸屏趨勢圖功能實例
ControlLogix ?User-Defined結構體嵌套
ControlLogix系統內存優化解析
Vim指令訓練程序
關于TFA/A1灌裝機Gas Sensor
ControlLogix控制器ControlNet網絡規劃
總結
以上是生活随笔為你收集整理的c语言case可以判断多个条件吗,case 多个条件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 数组递减输出,合并两个线性表
- 下一篇: 用c语言实现随机无向图的生成,C ++程