我有一个程序,要求用户选择add class/ drop class / print invoice
。类保存为数组。我的发票有问题。我有两个函数来列出course name
和course credits
,然后在print invoice function
中传递。
但是,当用户输入多个类别时,第一类别在发票中具有适当的类别字符串名称和信用。以下课程是准确的课程编号array
,但复制相同的学分和课程名称。我尝试了不同的解决方案,使这些函数返回一个指针,但是没有运气。任何建议将对您有所帮助,谢谢!
试图具有打印/返回指针功能
void printInvoice(int crn[], int idNumber){
int i;
printf("\n\t\tFee Invoice Prepared for Student:\n\t\t%d", idNumber);
for ( i=1; i<MAX_CLASS ; i++){
if ( crn[i] != 0 ){
printf ("\n\t\t%d\t%s\t\t%d", crn[i], printPrefix(crn), getCredits(crn) );
}
}
}
int getCredits(int crn[]){
int i;
for(i = 1; i < MAX_CLASS; i++){
switch(crn[i]){
case 4587: return 4;
break;
case 4599: return 3;
break;
case 8997: return 1;
break;
case 9696: return 3;
break;
case 7895: return 2;
break;
case 9658: return 3;
break;
case 4287: return 4;
break;
case 9599: return 3;
break;
case 8927: return 1;
break;
case 7696: return 4;
break;
case 7890: return 3;
break;
case 9008: return 5;
break;
}
}
}
char* printPrefix(int crn[]){
int i;
for(i = 1; i < MAX_CLASS; i++){
switch(crn[i]){
case 4587: return "MAT 236";
case 4599: return "COP 220";
case 8997: return "GOL 124";
case 9696: return "COP 100";
case 7895: return "MNT 125";
case 9658: return "OPT 120";
case 4287: return "MAT 836";
case 9599: return "COP 220";
case 8927: return "GOM 124";
case 7696: return "COT 100";
case 7890: return "MOT 125";
case 9008: return "OPT 520";
}
}
}
期待相应的班级名称和学分号。 实际结果是输入的第一个数组(课程)复制其后继数组的班级名称和学分编号
答案 0 :(得分:1)
在每个功能中:
for(i = 1; i < MAX_CLASS; i++){
switch(crn[i]){
case 4587: return 4;
break;
...
您进入一个循环,然后返回基于crn[0]
的值,因此您只能经历循环的第一次迭代。
这些功能根本不需要循环。不用传递整个crn
数组,而是传递您感兴趣的数组元素并对其进行操作。
因此将您的功能更改为:
int getCredits(int crn){
switch(crn){
case 4587: return 4;
...
default: return -1;
}
}
char* printPrefix(int crn){
switch(crn){
case 4587: return "MAT 236";
...
default: return "";
}
}
并将其称为:
printf ("\n\t\t%d\t%s\t\t%d", crn[i], printPrefix(crn[i]), getCredits(crn[i]) );
还请注意,每个default
都会添加switch
个案例,因此总会返回某些内容。