- ベストアンサー
質問:関数についての問題
- 関数についての質問です。問題のコードでは、無限ループが発生してしまいます。対処法を教えてください。
- コード内に問題があり、無限ループが発生します。どのように修正すればいいですか?
- 関数に関する質問です。問題のコードを実行すると無限ループが発生してしまいます。修正方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
予測1の場合 for ( i = 0 ; i < num ; i ++ ) { if ( tensu{a][i] >= GOUKAKU) { succs[snum++] = i; } for ( i = 0 ; i < snum ; i ++ )←iを違う変数にする { printf("%2d番 (%3d点)¥n” , succs[i] + i , tensu[a][succs[i]]); } } 予測2の場合 for ( i = 0 ; i < num ; i ++ ) { if ( tensu{a][i] >= GOUKAKU) { succs[snum++] = i; for ( i = 0 ; i < snum ; i ++ )←iを違う変数にする { printf("%2d番 (%3d点)¥n” , succs[i] + i , tensu[a][succs[i]]); } } }
その他の回答 (3)
- ngsvx
- ベストアンサー率49% (157/315)
質問するなら、ソースは正確に書きましょうね。 1. tensu{a][i] 2.for ( i = 0 ; i < snum ; i ++ ); 3.printf("%2d番 (%3d点)¥n” 1,3は明らかにコンパイルエラーになります。 2も対応する括弧の数が合わなくなりエラーになりそうです。 もう一度、正確なソースを示してください。 それと、ループが複数ありますが、どのループで無限ループになっているのかも示してください。 あちこちに、表示用関数をしこんでおけばわかることです。 その結果、「示したソース以外の場所で無限ループしてた」ということもありますから。
すみません、寝ぼけて大間違いを書いてしまいました。No.1は忘れてください。
for ( i = 0 ; i < snum ; i ++ ); このfor文の意図がよくわかりませんが、「i<snum」が続く限り無限にループするのはおわかりですね。つまり、snumがゼロのときです。 その前でsnumに値を代入しているのは、 if ( tensu{a][i] >= GOUKAKU) succs[snum++] = i; です。(tensu[a][i]の間違いですね) このif文条件が成立しない限り、 succs[snum++] = i; は実行されません。つまり、snum++されません。 すなわち、 for ( i = 0 ; i < num ; i ++ ) のループの中で、 if ( tensu[i] >= GOUKAKU) が一度も成立しない場合に無限ループになります。
お礼
わかりにくい質問に回答していただきありがとうございました。回答していただいた方法で直りました。 ありがとうございました。