本節書摘來自異步社群出版社《c++入門經典(第5版•修訂版)》一書中的第6章,第6.4節,作者:【美】jesse liberty , rogers cadenhead,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
c++入門經典(第5版•修訂版)
編寫循環時,經常需要設定計數器變量、檢查計數器變量是否滿足條件并在每次循環疊代中修改該變量,如下面的while循環所示:

上述代碼在一行中顯示x 13次。for循環是一種複雜的循環,将這三個步驟合并到了一條語句中。該語句使用關鍵字for,後面是一對括号。在括号内,是三條用分号分隔的語句,它們分别初始化計數器、檢查條件和修改計數器。
下面的代碼是前述while循環的重寫版本,其輸出相同:
for循環的第一部分是初始化。可在這裡放置任何c++語句,但通常建立并初始化計數器變量。
第二部分是檢查,可以是任何合法的c++表達式,其作用與while或do-while循環中的條件相同。
第三部分是修改計數器的操作,這通常是一條将計數器遞增或遞減的語句,但可以是任何合法的c++語句。
在程式清單6.5中,程式multtable使用for循環顯示前10個可被使用者指定的數字整除的數。
程式清單6.5 multtable.cpp的完整源代碼
第11行的for語句初始化int變量counter、檢查該變量是否小于11并遞增變量counter,這些都是在一行中完成的。第13行為該for語句的循環體。
警告:
一種常見的錯誤是,使用逗号而不是分号來分隔for語句的各個部分,這将導緻編譯器錯誤。另一種常見錯誤是,在for語句的右大括号後面添加分号,這将導緻隻循環但什麼都不錯。有時候這樣做是合理的,是以編譯器不會報錯。
for循環功能強大而靈活。經常需要初始化多個變量、檢查複合邏輯表達式并執行多條語句。
如果初始化和操作部分包含多條語句,就必須使用逗号分隔它們,如下例所示:
這個循環的初始化部分設定了兩個int變量:x和y,注意到兩個聲明之間為逗号。
該循環的測試部分檢查條件x < 10。
該循環的操作部分遞增兩個int變量,并使用逗号分隔這兩條語句。
這個循環的循環體顯示兩個變量的乘積。
for循環的每部分都可為空。分隔各個部分的分号必不可少,但有些部分可不包含任何代碼,如下所示:
在循環體内,可包含另一個循環。外部循環每次疊代時,都将執行整個内部循環。
在程式清單6.6中,程式boxmaker在一個for循環中嵌套了另一個for循環,這旨在顯示一個由使用者選擇的字元組成的矩形,矩形的寬度和高度也由使用者指定。
程式清單6.6 boxmaker.cpp的完整源代碼
運作時,該程式首先讓使用者指定矩形的行數和列數,然後詢問使用者要使用什麼字元繪制矩形。
在下面的輸出中,繪制了一個由星号組成的10×15矩形:
在第16行,第一個for循環将計數器變量i初始化為0,接下來是循環體。
第18行為外部for循環的第1行,它建立了内部for循環。該loop将計數器變量j初始化為0,然後是内部for循環的循環體。第20行列印指定的字元,然後回到内部for循環的開頭。
内部for循環隻有一條語句,它顯示指定的字元。檢查的條件為(j < columns),如果為true,就将j遞增并再次顯示指定的字元。這個過程将不斷重複下去,直到j等于columns。
内部for循環的條件不滿足後(在前面的輸出中,此時列印了15個星号),将跳到第22行繼續執行:換行。然後傳回到外部for循環的開頭,對條件(i < rows)進行檢查。如果為true,就将i遞增并執行循環體。
在外部for循環的第二次疊代中,将重新開始内部for循環,即将j重新初始化為0,并再次運作整個内部for循環。
使用嵌套循環時,在外部循環的每次疊代中,都将執行整個内部循環一次,是以在每行中列印columns個指定的字元。