在編程中,我們經常需要重複執行某段代碼。比如打印1到100的數字,或者計算1到100的和。如果手動重複寫代碼,不僅繁瑣還容易出錯,這時候就需要循環結構來幫忙。C++提供了兩種常用的循環:while循環和for循環。本文將重點講解while循環,包括它的用法、與for循環的區別,以及實際應用場景。
一、爲什麼需要循環?¶
假設我們要打印1到10的數字,如果不用循環,代碼會是這樣:
cout << 1 << endl;
cout << 2 << endl;
cout << 3 << endl;
// ... 一直寫到10
這樣顯然很麻煩,而且如果要打印1到1000,代碼會更長。循環的作用就是重複執行一段代碼,直到滿足某個條件才停止。
二、while循環的基本語法¶
while循環的核心邏輯是:先判斷條件,如果條件成立,就執行循環體(大括號內的代碼),執行完後再次判斷條件,直到條件不成立爲止。
語法格式:
while (條件表達式) {
// 循環體:要重複執行的代碼
}
示例1:打印1到10¶
#include <iostream>
using namespace std;
int main() {
int i = 1; // 初始化計數器
while (i <= 10) { // 條件:i是否小於等於10
cout << "第" << i << "次循環:數字是" << i << endl;
i++; // 更新計數器(關鍵!否則會一直滿足條件,變成死循環)
}
return 0;
}
執行過程拆解:¶
- 初始化:
i = 1,表示從數字1開始。 - 判斷條件:檢查
i <= 10是否成立。第一次i=1,條件成立,執行循環體。 - 執行循環體:打印
i的值,然後i自增1(i=2)。 - 重複判斷:此時
i=2,條件2 <= 10成立,再次執行循環體,直到i=11時,條件11 <= 10不成立,循環結束。
示例2:計算1到10的和¶
int main() {
int sum = 0; // 總和初始化爲0
int i = 1;
while (i <= 10) {
sum += i; // 等價於 sum = sum + i
i++;
}
cout << "1到10的和是:" << sum << endl; // 輸出55
return 0;
}
三、while循環的關鍵:避免死循環¶
while循環的最大“陷阱”是死循環——條件永遠成立,導致循環體永遠執行。
錯誤示例(忘記更新i):
int i = 1;
while (i <= 10) { // 條件永遠成立(i不會變化)
cout << i << endl;
// 沒有i++,i永遠是1,循環無法結束!
}
修正:在循環體中必須有能讓條件變爲“假”的操作(比如i++)。
四、while循環 vs for循環:誰更適合?¶
| 對比項 | while循環 | for循環 |
|---|---|---|
| 語法結構 | while(條件) | for(初始化; 條件; 更新) |
| 適用場景 | 條件持續變化(次數不確定) | 已知循環次數(次數確定) |
| 典型場景 | 用戶輸入驗證(直到輸入正確)、處理文件(直到文件結束) | 遍歷數組(已知元素數量)、循環固定次數(如1-100) |
示例:用戶輸入驗證(用while更合適)¶
如果要讓用戶輸入一個1-100的數字,直到輸入正確才停止:
#include <iostream>
using namespace std;
int main() {
int num;
cout << "請輸入1-100的數字:";
cin >> num;
// while循環:條件“num是否在1-100之間”,直到用戶輸入正確
while (num < 1 || num > 100) {
cout << "輸入錯誤!請重新輸入:";
cin >> num; // 更新用戶輸入的數字
}
cout << "輸入正確!數字是:" << num << endl;
return 0;
}
這裏while循環的條件(num是否在1-100之間)無法確定循環次數,只能用while來持續檢查。
示例:遍歷數組(用for更合適)¶
如果要打印數組的所有元素(已知數組長度),用for循環更簡潔:
int arr[] = {1, 2, 3, 4, 5};
int len = 5;
for (int i = 0; i < len; i++) {
cout << arr[i] << endl;
}
for循環的初始化、條件判斷、更新變量可以在一行完成,適合固定次數的場景。
五、while循環的實際應用場景¶
1. 處理不確定次數的任務¶
比如讀取用戶輸入的多個數字,直到用戶輸入“-1”結束:
int n;
cout << "請輸入數字(輸入-1結束):";
cin >> n;
while (n != -1) {
cout << "你輸入的是:" << n << endl;
cout << "繼續輸入(-1結束):";
cin >> n;
}
cout << "程序結束!" << endl;
2. 重複執行直到條件滿足¶
比如猜數字遊戲,直到猜對爲止:
int secret = 42;
int guess;
while (true) { // 死循環,直到猜對才break
cout << "猜一個數字:";
cin >> guess;
if (guess == secret) {
cout << "猜對了!" << endl;
break; // 跳出循環
} else if (guess > secret) {
cout << "太大了!" << endl;
} else {
cout << "太小了!" << endl;
}
}
這裏while(true)表示“無限循環”,但通過break主動退出,這也是while循環的靈活應用。
六、總結¶
- while循環:適合條件不確定、需要持續檢查的場景(如用戶輸入、文件讀取),語法是
while(條件) { 循環體; }。 - for循環:適合已知循環次數的場景(如遍歷數組、固定次數操作),語法更緊湊。
- 核心區別:
while先判斷條件再執行,for的初始化、條件、更新可合併寫,按需選擇。
記住:無論用哪種循環,一定要確保條件能最終變爲“假”,避免死循環!多練習簡單示例(如打印數字、計算和),就能快速掌握~