C 循环扫描问题,多次尝试后崩溃

C 循环扫描问题,多次尝试后崩溃,c,loops,for-loop,scanf,C,Loops,For Loop,Scanf,所以我想做一个程序,用数组输入等级,这是主循环。问题是,它成功地请求输入,但在第五个学生,第一个科目之后,它崩溃了,我哪里出错了 当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()

所以我想做一个程序,用数组输入等级,这是主循环。问题是,它成功地请求输入,但在第五个学生,第一个科目之后,它崩溃了,我哪里出错了

当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");
}
浮点数据[4][7];
对于(studLoop=0;studLoop<5;studLoop++){
ave=0;
printf(“\n学生%d ID#”,studLoop+1);
数据[studLoop][0]=inputNum();
用于(gradLoop=1;gradLoop<7;gradLoop++){
printf(“主题%d:,梯度循环);
数据[studLoop][gradLoop]=inputNum();
gradLoop=检查等级(数据[studLoop][gradLoop],gradLoop,ave);
}
数据[studLoop][7]=ave/6;
printf(“按任意键继续…”);
getch();
系统(“cls”);
}
C使用,因此对于定义如下的数组

float data[4][7];
循环条件

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

然后,对于用法,学生的有效索引将是
data[0]
data[4]
,对于每个学生,成绩持有者将从
data[i][0]
data[i][6]
,其中
0既然您试图为每个学生存储5个学生和7个成绩,那么:

float data[4][7];
应该是

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

studLoop<5应该是
studLoop<4浮点数据[4][7]只允许4名学生。您可能还希望
gradLoop=0
gradLoop=1此外
数据[studLoop][7]
也打破了数组的界限。学生编号为5,因此我不必再更改它。如果我把它改为4,它不会要求学生5的成绩好的,所以我们的任务是一个2d数组问题,没有空间给学生5,只有4个学生。如果你想要5名学生,你需要
浮点数据[5][7]想象一下网格类比,第一列(数据[0][])将包含学生ID号,第二到第六列将包含学生的成绩(数据[][1-6]),最后一列(数据[][7])将包含成绩的平均值,这是为什么呢??如果计数从0开始,那么它[4]就足够了,对吗?0-4=5个值??很抱歉beginner@GermanIIIFelisarta语法
float data[4]
创建了一个数组,其中包含4个元素,索引为
0-3
。这并不意味着数组的最高索引是4。这是有效的,因为这样做是在声明大小,而不是在声明索引@GermaniiFelisarta,您只使用0到4来访问索引
float data[5][7];