【C言語入門】ネストをわかりやすく解説!
注意
本記事の内容には、誤った知識や古い情報が含まれている可能性があります。
必ず公式ドキュメントや信頼できる参考書なども併せてご確認ください。
C言語を学び始めると、必ず出てくる「ネスト(入れ子)」という言葉。
if文やfor文、while文などの中に、さらにif文やfor文が入っている状態を「ネスト」と呼びます。
「ネストが深くなると、何がどこで動いているのか分からなくなる…」
「波かっこ({ })の対応が分からなくなってエラーになる…」
そんな悩みを持つ初心者の方も多いはずです。
この記事では、ネストの基本から、よくある間違い、実践例まで、完全初心者向けにやさしく解説します!
ネスト(入れ子)ってなに?
ネストとは、制御構文(if文やfor文など)の中に、さらに制御構文が入っている状態のことです。
例え話
- ネストは「箱の中にさらに箱が入っている」イメージです。
- たとえば、for文の中にif文がある場合、「繰り返しの中で条件分岐をする」ことになります。
ネストの基本的な書き方
たとえば、for文の中にif文を入れると、次のようになります。
for (int i = 1; i <= 5; i++) {
if (i % 2 == 0) {
printf("%dは偶数です\n", i);
}
}
解説
- for文で1から5まで繰り返し
- その中でif文を使い、iが偶数のときだけメッセージを表示
初心者がつまずくポイント
-
波かっこ({ })の対応が分からなくなる
- どの{ }がどの文に対応しているか分からなくなり、エラーや意図しない動作になることが多いです。
-
インデント(字下げ)がバラバラになる
- ネストが深くなるほど、インデントを揃えないと見づらくなり、バグの原因になります。
-
「どこで何が実行されているか」分からなくなる
- どの条件や繰り返しの中で、どの処理が動いているのか混乱しやすいです。
実践例:九九表を表示する(for文のネスト)
ネストの理解を深めるために、for文を2重にネストして「九九表」を表示するプログラムを作ってみましょう。
#include <stdio.h>
int main() {
for (int i = 1; i <= 9; i++) { // 外側のfor文(段)
for (int j = 1; j <= 9; j++) { // 内側のfor文(掛ける数)
printf("%2d ", i * j);
}
printf("\n"); // 1段ごとに改行
}
return 0;
}
解説
- 外側のfor文(i)は「段」を表します(1の段~9の段)。
- 内側のfor文(j)は「掛ける数」を表します(1~9)。
-
i * j
で掛け算の結果を表示し、内側のfor文が1周するごとに改行します。
よくある間違い・注意点
1. 波かっこの対応ミス
for (int i = 1; i <= 5; i++)
if (i % 2 == 0)
printf("%dは偶数\n", i);
printf("ここはfor文の外です\n"); // ← 意図しない場所で実行される
解説
- 波かっこ
{}
を省略すると、for文やif文の「直後の1行」しか繰り返しや条件分岐の対象になりません。 - 複数行の処理をまとめたいときは、必ず
{}
で囲みましょう。
2. インデントがバラバラ
ネストが深くなるほど、インデント(字下げ)を揃えないと、どこがどのブロックか分かりにくくなります。
悪い例:
for (int i = 1; i <= 3; i++) {
if (i % 2 == 1) {
printf("%dは奇数\n", i);
}
}
良い例:
for (int i = 1; i <= 3; i++) {
if (i % 2 == 1) {
printf("%dは奇数\n", i);
}
}
3. ネストが深くなりすぎる
ネストが3重、4重…と深くなりすぎると、プログラムが読みにくくなり、バグの原因になります。
できるだけネストは2~3重までに抑え、必要なら関数に分けるなど工夫しましょう。