1

コードに問題があります。私のプログラムは登録システムで、スイッチケースを選択するたびに合計金額が表示されるはずですが、登録する最後の科目を選択した後、合計金額の追加が間違っているようです。助けてください。

#include <stdio.h>
#include <stdlib.h>

int main() 
{
    int n, none, ntwo, nthree, Total;
    float Algebra, Trigonometry, Calculus, Engiana, Physics;
    char password[20], username[8];
    Algebra = 100;
    Trigonometry = 300;
    Calculus = 500;
    Engiana = 750;
    Physics = 1500;
    Total = (none + ntwo + nthree);

    printf("Welcome to the Enrollment System \n");
    printf("Here is the list of Available Subjects \n");
    printf("\n");
    printf("Course Code         Price\n");
    printf("\n");
    printf("1. Algebra             %.2f \n",Algebra);
    printf("2. Trigonometry        %.2f \n",Trigonometry);
    printf("3. Calculus            %.2f \n",Calculus);
    printf("4. Engiana             %.2f \n",Engiana);
    printf("5. Physics             %.2f \n",Physics);

    printf("You can only select three courses to enroll for the Term \n");
    printf("\n Select First Course to Enroll \n");
    scanf("%d", &none);

    switch(none) 
    {
        case 1: printf(" You Enrolled Algebra %.2f \n",Algebra); break; //if conditions met , immediately goes to system pause
        case 2: printf(" You Enrolled Trigonometry %.2f \n", Trigonometry); break; //if conditions not met goes to another case
        case 3: printf(" You Enrolled Calculus %.2f \n", Calculus); break;
        case 4: printf(" You Enrolled Engiana %.2f \n", Engiana); break;
        case 5: printf(" You Enrolled Physics %.2f \n", Physics); break;
        default: printf(" The Course you entered is not valid \n"); break;
    }
    printf("\n Select Second Course to Enroll \n");
    scanf("%d", &ntwo);

    switch(ntwo) 
    {
        case 1: printf(" You Enrolled Algebra %.2f \n",Algebra); break; //if conditions met , immediately goes to system pause
        case 2: printf(" You Enrolled Trigonometry %.2f\n", Trigonometry); break; //if conditions not met goes to another case
        case 3: printf(" You Enrolled Calculus %.2f\n", Calculus); break;
        case 4: printf(" You Enrolled Engiana %.2f\n", Engiana); break;
        case 5: printf(" You Enrolled Physics %.2f \n", Physics); break;
        default: printf(" The Course you entered is not valid \n"); break;
    }

    printf("\n Select Third Course to Enroll \n");
    scanf("%d", &nthree);
    switch(nthree) 
    {
        case 1: printf(" You Enrolled Algebra %.2f \n",Algebra); break; //if conditions met , immediately goes to system pause
        case 2: printf(" You Enrolled Trigonometry %.2f \n", Trigonometry); break; //if conditions not met goes to another case
        case 3: printf(" You Enrolled Calculus %.2f \n", Calculus); break;
        case 4: printf(" You Enrolled Engiana %.2f \n", Engiana); break;
        case 5: printf(" You Enrolled Physics %.2f \n", Physics); break;
        default: printf(" The Course you entered is not valid \n"); break;
    }

    printf("Total Tuition Price = %.2f \n",Total);
    system("PAUSE");
    return 0;
}
4

3 に答える 3

2
Total = (none + ntwo + nthree);

この行は最後に来る必要があります。

つまり、コードの下部は次のようになります

    Total = (none + ntwo + nthree);
    printf("Total Tuition Price = %.2f \n",Total);
    system("PAUSE");
    return 0;
}

これらの命令は記述された順序で実行され、元のコードでTotalはユーザーが回答する前に計算されたことを思い出してください。

ところで、あなたが学習を始めたばかりであることは理解していますが、これは私が従う格言です。関数と配列と構造体にたどり着いたら、おそらくこれを再検討して、コードの重複を排除しようとするでしょう。

他の2人の回答者は、同様に有効な問題を指摘しています。現在、ユーザーの入力を追加しているだけで、おそらくコース自体のコスト(?)を追加したいと考えています。

于 2013-08-19T08:58:14.437 に答える
1

論理エラーが発生しています。scanf の後に変数 Total の割り当てステートメントを配置する必要があります。ただし、switch ステートメントで Total を適切な量で更新する必要があります。

例:

    case 1: printf(" You Enrolled Algebra %.2f \n",Algebra); Total += 100; break; //if conditions met , immediately goes to system pause
     case 2: printf(" You Enrolled Trigonometry %.2f \n", Trigonometry); Total += 300; break; //if conditions not met goes to another case
     case 3: printf(" You Enrolled Calculus %.2f \n", Calculus); Total += 500; break;
     case 4: printf(" You Enrolled Engiana %.2f \n", Engiana);Total += 750; break;
     case 5: printf(" You Enrolled Physics %.2f \n", Physics); Total += 1500; break;
     default: printf(" The Course you entered is not valid \n"); break;
     }
        printf("\n Select Second Course to Enroll \n");
        scanf("%d", &ntwo);`

PS: ループを使用してコードを改善できます。

于 2013-08-19T09:08:49.467 に答える
1

ミスは主に2箇所

あなたのTotal変数はintデータ型です。したがって、印刷中に使用する必要があります%d。使用するには、変数%.2fを作成する必要がありますTotalfloat

合計授業料を見つけるには、このようにそれぞれの場合に授業料を追加する必要があります

 case 1:Total += Algebra; printf(" You Enrolled Algebra %.2f \n",Algebra); break; //if conditions met , immediately goes to system pause
 case 2:Total += Trigonometry;  printf(" You Enrolled Trigonometry %.2f \n", Trigonometry); break; //if conditions not met goes to another case
 case 3:Total += Calculus;  printf(" You Enrolled Calculus %.2f \n", Calculus); break;
 case 4:Total += Engiana;  printf(" You Enrolled Engiana %.2f \n", Engiana); break;
 case 5:Total += Physics;  printf(" You Enrolled Physics %.2f \n", Physics); break;
 default: printf(" The Course you entered is not valid \n"); break;

Totalまた、代わりに 0 で初期化する必要があります(none + ntwo + nthree)

于 2013-08-19T09:10:59.663 に答える