-1

最初のコードは1の82として出てきます!階乗...理由は何ですか?doループが完全に正常に機能することを考えると、それは私にはまったく意味がありません。プログラムを実行すると、階乗に対するすべての回答を示す表が表示されます。doループは私がしなければならないことは大丈夫ですが、私はそれを使うことができません。

forループが正しく機能しない理由はありますか?

#include <stdio.h>                                     /* Necessary header */
#define LAST_NUMBER 25                                 /* Macro preset to avoid magic numbers */

int main(void)                                         /* Start executive method */
{
    int Nbr;
    signed long total = Nbr;

    printf("Nbr               Nbr!");                  /* Table Headers */
    printf("\n----------------------");

    for (Nbr = 1; Nbr<=LAST_NUMBER;)              /* Loop statement begins */
    {
        total *= Nbr;
        printf("\n%2d   %15ld", Nbr, total);
                Nbr++;
                                        /* Prints both columns for table */
    }                       /* Loop ends when predefined number is reached */

    return 0;
}                                                      /* End main method */

/* The following code works fine */

#include <stdio.h>                                     /* Necessary header */
#define LAST_NUMBER 25                                 /* Macro preset to avoid magic numbers */

int main(void)                                         /* Start executive method */
{
    int Nbr = 1;
    signed long total = Nbr;

    printf("Nbr               Nbr!");                  /* Table Headers */
    printf("\n----------------------");

    do                                                 /* Loop statement begins */
    {
        total *= Nbr;
        printf("\n%2d   %15ld", Nbr, total);            /* Prints both columns for table */
        Nbr++;
    }while (Nbr<=LAST_NUMBER);                         /* Loop ends when predefined number is reached */

    return 0;
}                                                      /* End main method */
4

2 に答える 2

2
int Nbr;
signed long total = Nbr;

変数を使用する前に、変数を初期化する必要があります。

于 2012-10-15T11:53:16.217 に答える
0

Nbr最初のケースでは、合計に割り当てる前に初期化しないため、初期値は不確定です。スコープのある変数auto(関数またはブロックで宣言され、staticキーワードのない変数)は初期化されないままになります。

于 2012-10-15T11:55:15.663 に答える