我的代码有问题。我的程序是一个注册系统,每次我选择一个开关案例,它应该显示总价格,但在选择最后一个主题注册后,总价格添加似乎是错误的。请帮帮忙。
#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;
}发布于 2013-08-19 16:58:14
Total = (none + ntwo + nthree);这一行应该排在最后。
也就是说,代码的底部应该如下所示
Total = (none + ntwo + nthree);
printf("Total Tuition Price = %.2f \n",Total);
system("PAUSE");
return 0;
}请记住,这些指令是按照它们编写的顺序执行的,在您的原始代码中,Total是在用户有机会回答之前就计算出来的。
顺便说一句,我知道你可能刚刚开始学习,但这是我遵循的一条格言,如果你复制粘贴的代码超过一行,你可以做得更好。一旦您了解了函数、数组和结构,您可能会重新考虑这一点,并尝试减少任何类型的代码重复。
其他两个回答者指出了一个同样有效的问题,您当前只是添加用户输入,并且您可能希望添加成本(?)课程本身。
发布于 2013-08-19 17:08:49
你有一个逻辑错误。你需要把你的变量Total的赋值语句放在scanf后面。但您必须在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-19 17:11:00
主要有两个错误
您的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
https://stackoverflow.com/questions/18309851
复制相似问题