break文でループを一気に(2個以上)
抜けたい場合はどのようにすればいいのでしょうか?
たとえば下のプログラムで1から2に抜けたい
すなわちifとforの2つの中括弧を同時に抜けたい場合には
どうやってbreak文を記述すればいいのでしょうか?
(goto文は使わないということでお願いします。
int k=0;
int i;
for (i=1;i<10;i++){
k++;
printf("%d",k);
if (k == 5){
printf("a");
break;・・・・・・・・・1→
}
}
printf("finish");・・・・・・・・・2←
No.4ベストアンサー
- 回答日時:
No.2 です。
> for文を2つ一気に抜ける場合にはどうしたらいいんでしょうか?
この場合は、素直に goto 文を使うか、No.1 さんのようにフラグで制御するしかないでしょう。
私はC言語実務経験20年以上ですが、goto 文について言えば、「無闇やたらに使うべきではないが、使うべき所で使うのをためらってはいけない」ということです。
よく、「何が何でも絶対に goto は使うな!」と言う人がいますが、これは間違っています。
たった1個の goto 文を避けるために、フラグなどを組み合わせて複雑怪奇な構造にすることの害の方が、余程大きいです。
No.3
- 回答日時:
この例だと、1のbreakでforループを抜けるので、問題ないですね。
breakは中カッコを抜けるのでなく、for/while/switchから抜けるものです。二重になったforやwhileループから抜け出すのであれば、普通はgotoを使うのがベストだと思います。
gotoを省くためには、新たにフラグ用の変数を設定したり、途中をスキップするif文を設けたりしてプログラムが読みにくくなりますから止めたほうが良いでしょう。
まれにgotoなしでも読みやすいプログラムが書ける場合もあります。
No.2
- 回答日時:
> break文でループを一気に(2個以上)抜けたい場合は
このプログラムでは、ループは for 文一つしかありませんが…
したがって、このままで 1 から 2 に抜けます。
(if 文は、ループではないので、1 の break で if を抜けるわけではありません。for を抜けます。)
これをコンパイルして実行すると、「12345afinish」と表示されます。
これで、お望みの動作ではないのでしょうか??
このプログラムは思いつきで書いてみたものなのでまさか実行できるとは思いませんでした。
break文はfor文を抜くためのものなんですね。よくわかりました。ありがとうございます。
ただ、for文を2つ一気に抜ける場合にはどうしたらいいんでしょうか?
(お礼のところに質問を書いてしまってすいません。)
No.1
- 回答日時:
gotoを使った方がスマートですが、こんな感じでしょうか。
・ifのあと何もないのなら、breakの前にi=10;を入れてforループを抜けさせる。
・または、int flag;としておいて、forの前でflag=0;と初期化、breakの前にflag=1;でフラグを立てて、ifのあとで、if(flag==1)break;でforを抜ける。
確かにgotoを使ったほうがスマートですね。
でもgotoは禁じ手と聞いたことがあるのであんまり使いたくないんですよね^^;
ご回答どうもありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語について 4 2022/07/02 01:08
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
C言語 エラーの原因がわからないので,見てほしいです
C言語・C++・C#
-
多重ループの抜けだし方
C言語・C++・C#
-
バッファとは何ですか
C言語・C++・C#
-
-
4
IOException ってどういうときに起こるのでしょうか?
Java
-
5
関数から配列を返すには?
C言語・C++・C#
-
6
for文の中にswitch文はいれられない??
C言語・C++・C#
-
7
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
8
strcat関数を自作したいです
C言語・C++・C#
-
9
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
10
「システムがビジー状態です」のエラーが出て・・困っています。
Windows Me・NT・2000
-
11
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
12
【gcc・cygwin】multiple definitionエラーの解決法
C言語・C++・C#
-
13
*をユーザーが入力した数字の数だけ表示するプログラムの作り方を教えてください
C言語・C++・C#
-
14
ダイアログの上のテキストボックスの、初期値を設定する方法が分かりません・・・・
C言語・C++・C#
-
15
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
16
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
17
unsigned long long 型のフォーマット指定子
C言語・C++・C#
-
18
ファイル内のデータを1行削除する方法
C言語・C++・C#
-
19
ループを途中で抜けたいのですが。
C言語・C++・C#
-
20
複数の変数を宣言する時、同時に初期化?できないでしょうか?
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
do-while文が禁止される理由
-
C言語forループが完結した場合...
-
猫でもわかる、がわかりません。
-
VBScriptでSQLに接続し、CSV出...
-
if文を使わずに奇数・偶数を判断
-
While文の終わりにセミコロンが...
-
エクセルVBAで Do While (1)って?
-
C言語、whileループを抜け出す...
-
ループを途中で抜けたいのですが。
-
繰り返し文の利点について
-
break文でループを一気に抜ける...
-
無限ループ対策
-
excel VBA if文について
-
マイナスからプラスへ転じた時...
-
Notepad++の関数リスト表示の変...
-
DWORDの実際の型は何でしょうか
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
2÷3などの余りについて
-
構文エラー";"が型の前にあり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
do-while文が禁止される理由
-
ループを途中で抜けたいのですが。
-
エクセルでC言語のfor文と同じ...
-
break文でループを一気に抜ける...
-
入力した文字列から母音だけを...
-
For文の終了値を関数にしても問...
-
Excel VBAで年度をまたぐ期間の...
-
エクセルVBAで Do While (1)って?
-
C言語forループが完結した場合...
-
if文の中にfor文なのか、for文...
-
PIC のプログラムについて ど...
-
無限ループ対策
-
プログラムで関数は使わない方...
-
for文while文の無限ループの違...
-
猫でもわかる、がわかりません。
-
n重のfor文にするには?
-
C言語、whileループを抜け出す...
-
ゲームオーバーのプログラム
-
PAD図の書き方
-
プログラムの『軽い』と『重い...
おすすめ情報