涉及数组的C编程作业问题

时间:2019-04-04 18:57:25

标签: c arrays

我有一个程序,要求用户选择add class/ drop class / print invoice。类保存为数组。我的发票有问题。我有两个函数来列出course namecourse 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";
        }
    }
}

期待相应的班级名称和学分号。 实际结果是输入的第一个数组(课程)复制其后继数组的班级名称和学分编号

1 个答案:

答案 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个案例,因此总会返回某些内容。