2

私はごく最近 C を学び始めたので、私の質問が非常に基本的なものであることは理解していますが、どんな助けも大歓迎です。

関数ファクトで res 値をメインに戻そうとしていますが、メインで結果を出力すると 0 になります。いくつかの print ステートメントを挿入すると、ファクト ルーチンで res が正しく計算されていることがわかりますが、結果がメインに正しく返されません。

ここで非常に基本的な何かが欠けていると確信しています。

ありがとう

#include <stdio.h>

unsigned long fact (int n){
    unsigned long res = 1;

    while ( n >= 0 )
    {
        res *= n;
        n--;
    }

    return res;
}

int main (void){
    int n;
    unsigned long res;

    printf("Insert number:\n");
    scanf("%d", &n );

    res = fact (n);

    printf("The factorial number is %lu", res);

    return 0;
}
4

2 に答える 2

8

ループ条件は です。これは、関数が戻る前に 0 が乗算されることn >= 0を意味しresます。したがって、結果は常に 0 になります。

于 2013-01-12T18:39:25.000 に答える
7

ループ条件が間違っています。の最後の実行にwhile (n>=0)n=0. これを掛けるresと0にリセットされます。

ループを次のように変更することでこれを修正できますwhile (n > 1)

今後の参考のために、デバッガー (GDB や Visual Studio Express など) を使用してこのような問題を調査できます。または、コードにステートメントを追加してフローをトレースし、プログラムを通じて のprintf値がどのように変化したかを確認します。res

于 2013-01-12T18:40:00.603 に答える