C言語⑫(2025/07/02)

ループの中断(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ループを中断するための文
switchcaseごとの処理を切り分けるために使う
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)

参考:https://9cguide.appspot.com/08-03.html

コメント

タイトルとURLをコピーしました