-1

Do ループを移動しようとしたり、別のループを追加して入れ子にしたりすると、奇妙な問題が発生します。以下に表示されている場所に DO を配置します。正常にループします。

{
    float numbers[MAX_DATA];
    printf("Please Eneter the Amount of Numbers You Would Like to Use\n");
    scanf("%d",&amount);
    if (amount>MAX_DATA)
    {
        printf("Your entry was too big");
    }
    else
    {
        input(numbers,amount);
        do
        {
            printf("\nStatistical Calculator Menu\n");
            printf("\n(1) Mean\n(2) Standard Deviation\n(3) Range\n(4) Restart/Exit\n");
            scanf("%d",&input2);
            if (input2==1)
            {
                mean(numbers,amount);
            }
            else if (input2==2)
            {
                standard(numbers,amount);
            }
            else if (input2==3)
            {
                range(numbers,amount);
            }
            else if(input2==4)
            {
                printf("Would You Like to (5)Restart or (6)Quit?");
                scanf("%d",&input2);
            }
        }
        while(input2!=4);
    }
    getch();
    return 0;
}

しかし、ここに配置したり、do ループを追加して入れ子にしたりすると、「getch の前にしばらく期待してください」というエラーが発生します。

{
    int amount=0;
    int input2;
    do
    {
        float numbers[MAX_DATA];
        printf("Please Eneter the Amount of Numbers You Would Like to Use\n");
        scanf("%d",&amount);
        if (amount>MAX_DATA)
        {
            printf("Your entry was too big");
        }
        else
        {
            input(numbers,amount);
            printf("\nStatistical Calculator Menu\n");
            printf("\n(1) Mean\n(2) Standard Deviation\n(3) Range\n(4) Restart/Exit\n");
            scanf("%d",&input2);
            if (input2==1)
            {
                mean(numbers,amount);
            }
            else if (input2==2)
            {
                standard(numbers,amount);
            }
            else if (input2==3)
            {
                range(numbers,amount);
            }
            else if(input2==4)
            {
                printf("Would You Like to (5)Restart or (6)Quit?");
                scanf("%d",&input2);
            }
        }
        while(input2!=4);
    }
    getch();
    return 0;
}

なぜこのエラーが発生するのですか?

4

1 に答える 1

3

インデント(Cコードの美化)の使い方を学んでください。

インデントと論理フローは完全に異なります。

まず、インデントされている場合はなぜ最初であり、対応するelseは同じレベルのインデントである必要があります。

エラーの原因は、doループがifステートメントの「else」セクションの一部であるということです。ただし、常に実行するようにインデントします。

于 2012-10-08T07:38:50.680 に答える