選擇)
上一課標(biāo)準(zhǔn)答案輸出2result true會(huì)輸出1條件應(yīng)寫if (angle -90.0 angle 90.0) { std::cout Move std::endl; }上一課最重要的是 并且所有條件都要成立 || 或者至少一個(gè)條件成立 ! 取反第 6 課switch—— 多狀態(tài)選擇前面我們學(xué)了if else if else它非常靈活。但如果程序只是根據(jù)一個(gè)變量的不同“固定值”選擇不同操作switch往往更清楚。例如機(jī)械臂狀態(tài)0 停止 1 運(yùn)行 2 故障 3 回零我們當(dāng)然可以寫if (state 0) { // 停止 } else if (state 1) { // 運(yùn)行 } else if (state 2) { // 故障 } else if (state 3) { // 回零 }但是 C 還有一種專門處理這種情況的結(jié)構(gòu)switch1. 最基本的switch先看代碼int state 2; switch (state) { case 0: std::cout Stop std::endl; break; case 1: std::cout Running std::endl; break; case 2: std::cout Error std::endl; break; }現(xiàn)在不要急著背。我們一點(diǎn)點(diǎn)拆。2.switch (state)是什么意思switch (state)可以理解成看一看state現(xiàn)在是什么值然后去找對(duì)應(yīng)情況。假設(shè)state 2;那么程序會(huì)去找case 2:所以state 2 ↓ switch(state) ↓ 尋找 case 2 ↓ 執(zhí)行 case 2最終輸出Error3.case是什么case 0:可以理解成如果state的值是0執(zhí)行這里。所以case 1:表示如果是1。case 2:表示如果是2。注意case后面不是分號(hào)case 2;這是錯(cuò)的。而是case 2:后面用的是:冒號(hào)。4. 為什么需要break這是switch最容易出錯(cuò)的地方??碿ase 2: std::cout Error std::endl; break;這里break;可以理解成到這里就離開這個(gè)switch。也就是找到對(duì)應(yīng) case ↓ 執(zhí)行內(nèi)容 ↓ break ↓ 退出 switch5. 如果不寫break會(huì)怎樣看這個(gè)例子int state 1; switch (state) { case 0: std::cout A std::endl; case 1: std::cout B std::endl; case 2: std::cout C std::endl; }因?yàn)閟tate 1;程序先找到case 1:輸出B但是沒有break。于是它會(huì)繼續(xù)往下執(zhí)行case 2:于是又輸出C最終是B C這叫fall-through繼續(xù)向下貫穿執(zhí)行。你現(xiàn)在不需要記英文。只要記初學(xué)階段每個(gè)case后通常都要寫break;。6. 標(biāo)準(zhǔn)寫法switch (state) { case 0: std::cout Stop std::endl; break; case 1: std::cout Running std::endl; break; case 2: std::cout Error std::endl; break; }這樣state 0 → Stop state 1 → Running state 2 → Error7. 如果沒有匹配的case怎么辦比如int state 9;但是我們只有case 0: case 1: case 2:這時(shí)候可以使用default:例如switch (state) { case 0: std::cout Stop std::endl; break; case 1: std::cout Running std::endl; break; case 2: std::cout Error std::endl; break; default: std::cout Unknown state std::endl; break; }如果state 9;就會(huì)進(jìn)入default:輸出Unknown state你可以把default理解成其他情況。所以它有點(diǎn)像else8.switch和if有什么區(qū)別這是今天真正需要理解的地方。假設(shè)int state 2;你想判斷state 是 0 state 是 1 state 是 2 state 是 3這種情況很適合switch因?yàn)槟闶窃诒容^同一個(gè)變量的固定值。但如果你要判斷temperature 80或者angle -90 angle 90這種條件就更適合if9. 最簡(jiǎn)單的判斷方法你現(xiàn)在可以先這樣記switch適合一個(gè)變量 幾個(gè)明確的固定值例如state 0 state 1 state 2if適合大小比較 范圍判斷 多個(gè)條件組合例如temperature 80angle -90 angle 90connected !error10. 機(jī)器人狀態(tài)機(jī)的雛形這個(gè)概念以后特別重要。機(jī)械臂可能有這些狀態(tài)int robot_state 0;規(guī)定0 Idle 空閑 1 Moving 運(yùn)動(dòng) 2 Error 故障 3 Homing 回零于是switch (robot_state) { case 0: std::cout Idle std::endl; break; case 1: std::cout Moving std::endl; break; case 2: std::cout Error std::endl; break; case 3: std::cout Homing std::endl; break; default: std::cout Unknown std::endl; break; }這種程序結(jié)構(gòu)以后在機(jī)器人控制 嵌入式程序 ESP32 ROS2 機(jī)械臂控制器里面都很常見。11. 逐行看一遍#include iostream int main() { int robot_state 3; switch (robot_state) { case 0: std::cout Idle std::endl; break; case 1: std::cout Moving std::endl; break; case 2: std::cout Error std::endl; break; case 3: std::cout Homing std::endl; break; default: std::cout Unknown std::endl; break; } return 0; }執(zhí)行robot_state 3進(jìn)入switch (robot_state)尋找case 3:找到以后執(zhí)行std::cout Homing std::endl;輸出Homing然后break;退出switch。12. 一個(gè)特別重要的理解switch不是循環(huán)。很多初學(xué)者看到switch可能誤以為它會(huì)一直執(zhí)行。不會(huì)。它只是根據(jù)當(dāng)前值選擇一條分支執(zhí)行一次。例如int state 1; switch (state) { ... }執(zhí)行完相應(yīng)case后程序繼續(xù)向下運(yùn)行。本課小練習(xí)第 1 題int state 1; switch (state) { case 0: std::cout 10 std::endl; break; case 1: std::cout 20 std::endl; break; case 2: std::cout 30 std::endl; break; }輸出什么第 2 題int state 5; switch (state) { case 0: std::cout 1 std::endl; break; case 1: std::cout 2 std::endl; break; default: std::cout 3 std::endl; break; }輸出什么第 3 題break;在這里主要是干什么的第 4 題下面兩個(gè)需求分別更適合if還是switchA. 判斷機(jī)械臂溫度是否大于 80℃ B. 根據(jù) robot_state 的 0、1、2、3 執(zhí)行不同動(dòng)作