ループの中断(break文)
ループ中にbreak;を見つけると、「直近のループ」を抜ける。
while(true){
if(flg == true)break; //flgがtrueになったらwhileループを抜ける。
※「Cの絵本」の説明について
あなた:
break文の説明で、「一番近いブロックの終わりに移動」とあったんですが、forとかwhileループの中に置かれたifブロック中にbreak文があった場合、どうなるのですか?
ChatGPT:
とてもいい質問です!break
は「if」じゃなくて、forやwhileなどの「ループ構造」に対してのみ効力があります。**
✅ 結論
cppコピーする編集するfor (...) {
if (...) {
break; // → この break は for の外に飛び出す!
}
}
このように、break
は 「一番近いループ構造(for, while, do-while, switch)」の外へジャンプします。
🔍 なぜ if に対しては効かないのか?
if
は「条件によって処理を分けるだけの文」であって、
「繰り返し」や「制御構造」ではないからです。
🧪 具体例で見てみよう
#include <stdio.h>
int main() {
for (int i = 0; i < 5; i++) {
printf("i = %d\n", i);
if (i == 2) {
break; // for ループを抜ける
}
}
printf("ループ終了\n");
return 0;
}
🧾 出力:
makefileコピーする編集するi = 0
i = 1
i = 2
ループ終了
→ iが2になった時点で if
に入る → break
実行 → for
から脱出
⚠️ 注意点
もし if
の中に break
を書いて、その外側にループもswitchもなかった場合:
if (true) {
break; // ❌ コンパイルエラーになります
}
→ 「breakの相手がいない」のでエラーになります!
✅ まとめ
場所 | break できる? | 理由 |
---|---|---|
for , while , do-while | ✅ | ループを中断するための文 |
switch | ✅ | case ごとの処理を切り分けるために使う |
if , else | ❌ | 条件分岐なだけで「中断」対象が存在しない |
いつでも「break
は誰に向かって放たれているのか?」を意識すると、使い方がブレなくなりますよ😉
(by ChatGPT)
繰り返しの次の回に移る(continue文)
ループの中にcontinue;を見つけると、処理を中断して「直近のループ」の先頭に戻る(ループは繰り返す)。
処理を選択する(switch()文)
書式
switch(式){
case 値1:
//処理① ⇒式=値1のときの処理
break;
case 値2:
//処理② ⇒式=値2のときの処理
break;
case 値3:
//処理③ ⇒式=値3のときの処理
break;
default: //処理上必要なければ記載不要。
//処理 ⇒式の値がcaseのどれにも該当しない場合の処理
break;
※式の結果は整数値になる場合にしか使えない
int mode = 0;
while(true){
switch(mode){
case 0: //同じ処理を行いたいときは、breakを省き、処理を空にすることもできる。
case 1:
printf("mode:%d\n",mode);
break;
case 2:
printf("mode:%d\n",mode);
break;
case 3:
printf("mode:%d\n",mode);
break;
case 4:
printf("mode:%d\n",mode);
break;
default:
printf("modeが範囲外(%d)\n",mode);
break;
}
if (mode >= 10)break;
mode++
}
実行結果
mode:0
mode:1
mode:2
mode:3
mode:4
modeが範囲外(5)
modeが範囲外(6)
modeが範囲外(7)
modeが範囲外(8)
modeが範囲外(9)
modeが範囲外(10)
コメント