首页 > 解决方案 > 涉及数组的C编程作业问题

问题描述

我有一个程序要求用户选择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";
        }
    }
}

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

标签: carrays

解决方案


在您的每个功能中:

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因此总是会返回某些内容。


推荐阅读