プログラムがどこで無限ループに陥っているかを調べるために、下記プログラムのように、while文の中にprintf文を挿入してみました(/* デバッグ用 */のついた行)。このプログラムを実行すると、下記のようなデータが画面に延々と流れます。
#include <stdio.h> int main(void){ int count; /* 奇数の数 */ int odd; /* 現在の奇数値 */ count = 0; odd = 1; /* 奇数の初期値 */ while(odd != 10){ /* 10になるまで */ count++; /* 奇数の数を加算 */ printf("odd, count = %d, %d\n", odd, count); /* デバッグ用 */ odd = odd+2; /* 次の奇数へ */ } printf("count = %d\n", count); /* 奇数の数を表示 */ }このように、出力結果が一画面に収まらない場合は、出力リダイレクション(>) を使ってファイルに出力した方が良いでしょう。実行ファイルをa.out、出力するファイルをfileとすれば、odd, count = 1, 1 odd, count = 3, 2 odd, count = 5, 3 odd, count = 7, 4 odd, count = 9, 5 odd, count = 11, 6 odd, count = 13, 7 odd, count = 15, 8 odd, count = 17, 9 ................のように実行することにより、ファイル「file」にデータが書き込めます。ここで、注意してほしいのは、上記を実行した場合、大量のデータがfileに書き込まれていく点です。従って、すぐにプログラムを停止(Ctrl+c)させた方が良いでしょう。あとは、fileを(cat, lessコマンドなどで)表示し、解析することができます。a.out > file
実行結果を見ると、奇数の値が10を超えても処理が続いていることがわかります。そこで、繰り返しの条件をチェックします。条件は「odd != 10」となっています。 printf文の出力結果からもわかるように、oddは奇数であり、偶数の10になることはありません。よって、条件が常に「真」となっていたことがわかります。従って、条件を「odd <= 10」とすれば正常に動作します。