dポイントプレゼントキャンペーン実施中!

ぼくはプログラム始めたばかりです。ミスを見つけられた方、ご指導お願いします。
正整数nを入力して、nの階乗をもとめるプログラムを作りたいのですが、実行結果がいつも1になります。どこがおかしいか教えてください。以下のプログラムです。
#include <stdio.h>

int main(void)
{
int i, n, s;

printf("n = ?");
scanf("%lf", &n);
s = 1;
i = 1;
while(i <= n) {
s = s * i;
i = i + 1;
}
printf("s = %3d\n", s);

return 0;
}

A 回答 (4件)

while文はOKです。

問題はscanfの"%lf"です。
ここは"%d"ですね。ちなみに、fは符号つき浮動小数点実数の時に使います。
    • good
    • 1

#2です。

すみません訂正です。プログラムを勘違いしてました。
先ほどの回答は無しにしてください。

で、答えとしては
scanf("%lf", &n);
の部分を
scanf("%d", &n);
にしたらできませんかね。
    • good
    • 1

scanf("%d",&n);で正しく動きます。


それ以外は問題ないです。
    • good
    • 0

s = s * i;


i = i + 1;
として計算していますが変化するのは変数iだけですよね?
これでは変数sはいつまでたっても1のままです。
計算上、1に何をかけても答えは1ですので、sの値も変化させるとかしない限り答えは1だけになりますよ。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています