C программирование домашнего вопроса с участием массивов - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть программа, которая просит пользователя выбрать 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";
        }
    }
}

Ожидайте название соответствующего класса и номер кредита. Фактические результаты - первый введенный массив (курс), копии их имени класса и номера кредита для следующих массивов

1 Ответ

1 голос
/ 04 апреля 2019

В каждой из ваших функций:

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 "";
    }
}

И вызовите ихas:

printf ("\n\t\t%d\t%s\t\t%d", crn[i], printPrefix(crn[i]), getCredits(crn[i]) );

Обратите также внимание, что default кейсы добавляются для каждого switch, поэтому что-то всегда возвращается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...