加法和赋值错误

Addition and Assigned Values Wrong

本文关键字:错误 赋值      更新时间:2023-10-16

我的代码有问题。我的课程是一个招生系统,每次我选择切换案例时,它都应该显示总价,但在选择了最后一个报名科目后,总价添加似乎是错误的。请帮忙。

#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         Pricen");
    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 %.2fn", Trigonometry); break; //if conditions not met goes to another case
        case 3: printf(" You Enrolled Calculus %.2fn", Calculus); break;
        case 4: printf(" You Enrolled Engiana %.2fn", 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;
}
Total = (none + ntwo + nthree);

这行应该排在最后。

即,代码的底部应该看起来像这个

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

请记住,这些指令是按照编写顺序执行的,在原始代码中,Total是在用户有机会回答之前计算出来的。

顺便说一句,我知道你可能才刚刚开始学习,但这是我遵循的一句格言,如果你复制粘贴的代码不止一行,你可以做得更好。一旦你了解了函数、数组和结构,也许你会重新审视这一点,并尝试消除任何形式的代码重复。

另外两位回答者指出了一个同样有效的问题,你目前只是在添加用户输入,你可能想添加课程本身的成本。

您有一个逻辑错误。您需要在每次扫描后放置变量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);`

附言:你的代码可以使用循环来改进。。

主要有2个错误

您的Total变量是int数据类型。因此,打印时应使用%d。对于使用%.2f,您应该使Total变量float

为了找到总学费,你应该在每种情况下添加学费,如

 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;

此外,您应该使用0而不是(none + ntwo + nthree) 初始化Total