for文
5回書くのをやめる
第3章までで、条件によって処理を変えられるようになりました。ここからは 繰り返し です。まずは回数がはっきり決まっているときに使う for 文から始めます。
学生番号を 1 から 5 まで並べたいとき、printf を 5 行書けば確かに動きます。しかし人数が 40 人になった瞬間に破綻しますし、表示の形を直したくなったら 40 か所を直すことになります。回数が決まっている繰り返しは for に任せます。
for (int i = 1; i <= 5; i++) {
printf("No.%d\n", i);
}丸カッコの中は3つに分かれている
for の丸カッコの中は、セミコロンで区切られた 3 つの部分でできています。
- 最初の
int i = 1は 初期化。ループに入る直前に 1 回だけ実行されます - 真ん中の
i <= 5は 継続条件。毎回この式を確かめて、真のあいだだけ中身を実行します - 最後の
i++は 更新。中身を 1 回実行し終えるたびに動きます
動く順番は、初期化、条件、中身、更新、条件、中身、更新、と続き、条件が偽になった時点で終わります。条件を確かめるのは中身の 前 なので、最初から偽なら中身は 1 回も動きません。
i++ は i = i + 1 と同じ意味で、変数を 1 増やす書き方です。2 ずつ増やしたいなら i += 2、逆に減らしたいなら i-- と書きます。この 3 つの部分はどれも自由に変えられるので、for は「決まった回数」だけでなく「決まった刻みで動かす」道具でもあります。
ループ変数の住みか
for (int i = 1; ...) のように丸カッコの中で宣言した i は、そのループの中だけで生きています。ループを抜けたあとに i を使うとコンパイルエラーになります。終わったあとも値を見たいときは、for より前で int i; と宣言しておき、for (i = 1; i <= 5; i++) と書きます。
よくある失敗は、5 回回したいのに条件を i < 5 と書いてしまい 4 回しか回らない、というものです。1 から数えるなら i <= 5、0 から数えるなら i < 5 で、どちらも回数は 5 回です。回数は同じでも i の中身が違うので、その値を番号として表示するときは特に気をつけてください。
もうひとつ、中身が 1 文だけのときは波カッコを省略できますが、あとから 2 文目を足したときに 2 文目がループの外に取り残されます。省略せず必ず波カッコを付ける習慣にしてください。
では、成績表の見出しになる区切り線と、学生番号の一覧を for で出してみましょう。
要件
- = を20個並べた区切り線を表示し、改行する
- No.1 から No.5 までを1行ずつ表示する
- 最後にもう一度、= を20個並べた区切り線を表示する
- printf を並べて書かず、すべて for で出す
入出力例
main("") → "====================
No.1
No.2
No.3
No.4
No.5
===================="