質問: c言語について 下の画像は do-while文を使って階乗を計算し 階乗の値が1000より小さい時出 c言語について 下の画像は do-while文を使って階乗を計算し 階乗の値が1000より小さい時出力されるプログラムなのですが なぜか 値が1000を超える 7!まで出力されてしまいます どうすれば6!で止められるでしょうか
回答: あははははは(笑)。いや、笑い事じゃないんですが、そうか、ハマるよねぇ。 ええとですね。do { 中身 } の中身の部分は、実行が終わってからチェックが入るんですよ。 つまり、です。 a = 7 のブロックで: do { f *= a; /* ここで7!が計算される */ printf(" %d! = %d\n", a++, f); /* ここで7!が出力される } while (f < 1000); /* <-- 「やべッ、fが1000以上じゃんかよ!」 --> 終了 */ と言う流れになっています。と言うわけで7!が出力されて当然なのです。 これを避けるには・・・と言うか要するにfをどこで計算させるのか、って事なんですよね。fの計算式の位置が違う。もっと言うと「fが7!になった時点で」計算脱出せなアカン。 従って検査の前に置く、ってのが正しい書き方になります。 do { printf(" %d! = %d\n", a++, f); f *= a; /* ここで計算せなアカン。そしたら計算終了後チェックされて、出力自体はされない */ } while (f < 1000);