if 用於測試條件,條件為真時執行對應程式碼區塊。
if (x == 10); // 錯誤!多餘分號導致空陳述式
DoSomething(x); // 總會執行,不受條件控制
編譯器不會警告,因為語法合法但邏輯錯誤。
if (x > 10) {
cout << "The number is greater than 10" << endl;
DoSomethingWithNumber(x);
}
// 等價寫法
if (fileGood) ReadData();
// 等同於
if (fileGood == true) ReadData();
非零值視為 true,零值視為 false。可用 ! 邏輯非測試 false:
bool fileGood = OpenSomeFile();
if (!fileGood) ReportError();
if (cond_expr_1) {
true_statements_1;
}
else if (cond_expr_2) {
true_statements_2;
}
else {
false_statements;
}
所有迴圈共同要素:起點、迴圈本體、終點、終止條件、可選的 break/continue。
for (initial; cond_expr; adjust) {
statements;
}
經典範例:
for (int i = 0; i < 10; ++i) {
cout << "This is iteration " << i << endl;
}
僅在迴圈開始前檢查條件:
int x;
while (x < 1000) {
x = DoSomeCalculation();
}
// 使用 bool 旗標控制
bool done = false;
while (!done) {
// some code
done = SomeFunctionReturningABool();
}
至少執行一次,條件檢查在迴圈結尾:
bool done = false;
do {
// some code
done = SomeFunctionReturningABool();
} while (!done);
bool done = false;
startPoint:
// do some stuff
if (!done) goto startPoint;
最佳實踐:任何 goto 邏輯均可用 while/do-while 替代,優秀 C++ 程式設計師極少使用 goto。
| 關鍵字 | 行為 | 適用場景 |
|---|---|---|
continue | 跳過本次迴圈剩餘程式碼,直接進入下一次迭代 | 錯誤發生時略過後續處理 |
break | 立即終止整個迴圈 | 搜尋找到目標、錯誤需中止 |
// continue 範例
while (!done) {
bool error = SomeFunction();
if (error) continue; // 跳過後續程式碼
// 只有無錯誤才執行
}
// break 範例:陣列搜尋
int index = -1;
int searchNumber = 50;
for (int i = 0; i < numElements; ++i) {
if (myArray[i] == searchNumber) {
index = i;
break; // 找到即停止
}
}
進階 if,依運算式結果執行對應區塊:
switch (amountOverSpeedLimit) {
case 0:
fine = 0; break;
case 10: case 15:
fine = 20; break;
case 20: case 25: case 30:
fine = amountOverSpeedLimit * 10; break;
default:
fine = GoToCourt();
jailTime = GetSentence();
}
break 結束 switch,避免貫穿default 處理所有未匹配情況case 可堆疊多個值結構、指標、引用、函數、類別等進階 C++ 內容,建議參考專業教材深入學習。