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 で出してみましょう。

要件

  1. = を20個並べた区切り線を表示し、改行する
  2. No.1 から No.5 までを1行ずつ表示する
  3. 最後にもう一度、= を20個並べた区切り線を表示する
  4. printf を並べて書かず、すべて for で出す

入出力例

main("") → "==================== No.1 No.2 No.3 No.4 No.5 ===================="

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.c
学習モード

メモ

for文

⌘S で保存