Loop scanf проблема, вылетает после нескольких попыток - PullRequest
0 голосов
/ 26 ноября 2018

Итак, я пытаюсь создать программу, которая вводит оценку с использованием массивов, это основной цикл.Проблема в том, что он успешно запрашивает ввод, но после 5-го студента, 1-го предмета, он падает, где я ошибся ???

начинается сбой, когда studloop = 4;gradloop = 2

float data[4][7];
for(studLoop = 0; studLoop < 5; studLoop++){

    ave=0;
    printf("\nStudent %d ID#", studLoop+1);
    data[studLoop][0] = inputNum();
    for(gradLoop = 1; gradLoop < 7; gradLoop++){

        printf("Subject %d: ", gradLoop);
        data[studLoop][gradLoop] = inputNum();
        gradLoop = checkGrade(data[studLoop][gradLoop], gradLoop, ave);

    }
    data[studLoop][7] = ave / 6;
    printf("press any key to continue...");
    getch();
    system("cls");
}

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Ну, так как вы пытаетесь сохранить 5 учеников и 7 классов для каждого, то это:

float data[4][7];

должно быть

float data[5][7];
0 голосов
/ 26 ноября 2018

C использует индексирование массива 0 , поэтому для массива, определенного как

float data[4][7];

условие цикла

 for(studLoop = 0; studLoop < 5; studLoop++)

отключено на один .Это должно быть

 for(studLoop = 0; studLoop < 4; studLoop++)

То же самое применимо и к for(gradLoop = 1; gradLoop < 7; gradLoop++), где начальное значение индекса должно начинаться с 0.


Редакция после комментария:

В соответствии с требованием, 7 классов для 5 учеников, массив должен быть определен как

float data[5][7];
             ^^^------------------------------ number of grades
          ^^^--------------------------------- number of students

Тогда для использования действительнымИндекс для студентов будет от data[0] до data[4], а для каждого из учащихся обладатели оценок будут работать с data[i][0] до data[i][6], где 0<i<5.

...