プロが教える店舗&オフィスのセキュリティ対策術

C言語について
下の画像は do-while文を使って階乗を計算し
階乗の値が1000より小さい時出力されるプログラムなのですが

なぜか 値が1000を超える 7!まで出力されてしまいます
どうすれば6!で止められるでしょうか

「C言語について 下の画像は do-whi」の質問画像

A 回答 (1件)

あははははは(笑)。

いや、笑い事じゃないんですが、そうか、ハマるよねぇ。

ええとですね。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);
    • good
    • 0
この回答へのお礼

親切な説明でとても分かりやすかったです。ありがとうございます。

お礼日時:2020/08/03 16:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!