我曾经尝试过输入很多行不同变量来输入课程,然后将这些课程分配给学分并在收据上输出。但是,我没有使用300多个开关行,而是希望创建一个可以调用的开关函数。我以为我会根据个人选择的课程数量创建一个for循环来运行switch函数,但是当我运行它时,代码似乎永远运行了,甚至没有碰到返回0即可结束程序。有关调用该函数的任何提示,或者我是否做得不好?
int studentId, var, i;
float first;
int course, course1, course2;
float second, amount;
float credit1, credit2, credit3, credit4, credit5, credit6, credit7, credit8;
float paymentA, paymentB, paymentC, paymentD, total;
float creditA, creditB;
char *a;
void courseInfo(int myCourse){
switch(myCourse)
{
case 4587:
credit1 = 4;
a = "MAT 236";
break;
case 4599:
credit1 = 3;
a = "COP 220";
break;
case 8997:
credit1 = 1;
a = "GOL 124";
break;
case 9696:
credit1 = 3;
a = "COP 100";
break;
case 4580:
credit1 = 3;
a = "MAT 230";
break;
case 4581:
credit1 = 4;
a = "MAT 231";
break;
case 4582:
credit1 = 2;
a = "MAT 232";
break;
case 4583:
credit1 = 2;
a = "MAT 233";
break;
case 3587:
credit1 = 4;
a = "MAT 256";
break;
case 4519:
credit1 = 3;
a = "COP 420";
break;
case 6997:
credit1 = 1;
a = "GOL 127";
break;
case 9494:
credit1 = 3;
a = "COP 101";
break;
default:
printf("Sorry invalid entry!\n\n");
}
printf("%.2d\t%.2c\t%.2f\t\t$ %.2f\n", course, a, credit1 , credit1*120.25);
}
int main()
{
/*taking in the variables amounts*/
printf("Please enter Student ID:\n");
scanf("%i", &studentId);
printf("Enter how may courses-up to 3:\n");
scanf("%f", &amount);
for(i = 1; i = amount; i++){
printf("Enter the %.2f course number(s)\n", amount);
scanf("%i %i %i", &course, &course1, &course2);
courseInfo(course);
courseInfo(course1);
courseInfo(course2);
}
例如,我只想输入说3门课程,您将输入您想参加的3门课程CRN,它将运行到函数中,然后打印出价格和所要学习的内容,然后重复执行下一个3.我想如果没有输入任何内容,例如有人选择了1门课程,就不会为课程1和课程2变量赋值,从而跳过了切换
答案 0 :(得分:1)
避免全局变量。在尽可能接近变量的位置声明/定义变量。如果传递给函数的CourseInfo()
与a
不匹配,则在myCourse
中使用未初始化的case
。在C和C ++中,取消引用无效的指针值是未定义的行为。同样,在printf()
内调用CourseInfo()
内的格式字符串的第二个转换说明符“%c”与传递的参数(a
)不匹配,该参数是指向{{1 }}-格式化char
。
也
"%s"
是未定义的行为,因为三个参数是scanf("%i %i %i", &course, &course1, &course2);
,而不是float
。参数的类型必须与格式字符串的转换说明符匹配。
int
要要求用户输入最多三门课程:
for(i = 1; i = amount; i++){
printf("Enter the %.2f course number(s)\n", amount);
scanf("%i %i %i", &course, &course1, &course2);
courseInfo(course);
courseInfo(course1);
courseInfo(course2);
}
如果您想保存课程号以备将来使用,请使用int amount;
// ...
printf("Enter the %i course number(s):\n", amount);
for (int i = 0; i < amount; ++i) {
int course;
if (scanf(" %i", &course) == 1)
courseInfo(course);
}
数组,确保所写的元素不超过该数组的大小,并在int
中使用它循环:
for
对于您当前的设计,无法在int courses[amount] = { 0 }; // initialize with all zeros to be able to tell
// later if a input operation failed.
for (int i = 0; i < amount; ++i) {
int course;
if (scanf(" %i", &courses[i]) == 1)
courseInfo(course);
}
之外知道给定的课程号是否有效。也许courseInfo()
应该返回courseInfo()
(bool
),具体取决于传递的值是否有效。
答案 1 :(得分:0)
更改循环
<stdbool.h>
到
for(i = 1; i = amount; i++){