4.3 for 迴圈
while 和 do...while 迴圈很適合用在「你知道什麼條件下迴圈要繼讀或停止」,因為決定是否再繞一圈的就是一個條件判斷式。
但是在你很清楚一共要繞幾圈的情況下,使用接下來介紹的 for 迴圈,會輕鬆很多。
for 迴圈
使用 while 迴圈來繞指定圈數,我們多採用這樣的架構,其中變數 i 擔任計數器,我們會:
- 指定計數器的初始值
- 每圈檢查計數器的值是否仍符合條件
- 每圈遞增計數器的值

for 迴圈可以一次搞定這三者。
for 的基本語法

以輸出 1~10 為例,程式看起來比較簡潔,而且還是很清晰。
練習:輸出 1 ~ 10
for(int i=1; i<=10; i=i+1)
{
cout << i << endl;
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
練習:輸出 n 的所有正因數
因為 n 的所有正因數是 1~n 之間的整數,所以我們用一個 for 迴圈來遍歷整個區間做篩選。
int n = 16;
cout << n << "的正因數有:";
for(int i=1; i<=n; i++)
{
if(n%i==0)
{
cout << " " << i;
}
}
cout << endl;
16的正因數有: 1 2 4 8 16
變數的生命週期
輸入以下這段程式後編譯執行,在編譯時期就會發生錯誤。
#include <iostream>
using namespace std;
int main()
{
for(int i=1; i<=5; i++)
{
cout << i << endl;
}
cout << "now i=" << i << endl;
return 0;
}
12:25: error: 'i' was not declared in this scope
cout << "now i=" << i << endl;
^
cout << "now i=" << i << endl;
^
錯誤訊息表示在 12 行那邊使用到變數 i 但是沒有宣告。但是你往上看會覺得「明明我在第7行,for 迴圈那裡一開始就宣告了啊」。
仔細看一下錯誤訊息第一行末的 - "in this scope",他是說你沒有在這個 scope 宣告。這個 scope 是什麼意思呢?
我們來看一下這個程式:
#include <iostream>
using namespace std;
int main()
{
{
int i=5;
cout << "1: i=" << i << endl;
i=i+1;
}
cout << "2: i=" << i << endl;
return 0;
}
第 8, 9, 10 行被放在一組大括號裡,整個大括號範圍可以視為一個程式區塊(block)。這個區塊算是一個 區塊範圍(block scope),宣告在這個區塊裡的變數屬於區域變數(local variable),其生命週期始於宣告完成,終於離開區塊。