【问题标题】:Loop scanf problem, crashes after several tries循环scanf问题,多次尝试后崩溃
【发布时间】:2018-11-26 07:26:56
【问题描述】:

所以我试图制作一个使用数组输入等级的程序,这是主循环。问题是它成功询问输入但是在第5个学生,第1个科目之后,它崩溃了,我哪里出错了???

当 studloop=4 时崩溃开始;毕业循环=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");
}

【问题讨论】:

  • studLoop &lt; 5; 应该是 studLoop &lt; 4; 因为数组 float data[4][7]; 只允许 4 个学生。您可能还想要gradLoop = 0; 而不是gradLoop = 1; 而且data[studLoop][7] 也打破了数组界限。
  • 学号是5,不用改了。如果我将其更改为 4,它不会询问学生 5 的成绩
  • 好的,所以我们的任务是二维数组问题
  • 没有学生 5 的房间,只有 4 个学生。如果你想要 5 名学生,你需要 float data[5][7];
  • 想象一下网格类比,第一列(data[0][])将包含学生ID号,第二到第六列将包含学生的成绩(data[][1-6 ]) 最后一列(data[][7]) 将包含平均成绩

标签: c loops for-loop scanf


【解决方案1】:

既然您要存储 5 个学生和每个学生 7 个成绩,那么:

float data[4][7];

应该是

float data[5][7];

【讨论】:

  • 为什么会这样??如果计数从 0 开始,那么 [4] 就足够了,对吧? 0-4 = 5 个值??对不起初学者
  • @GermanIIIFelisarta 语法 float data[4] 创建一个包含 4 个元素空间的数组,索引来自 0-3。这并不意味着数组的最高索引是 4。
  • 之所以有效,是因为这样做是在声明大小而不是索引 @GermanIIIFelisarta ,您只使用 0 到 4 来访问索引
【解决方案2】:

C 使用0-based array indexing,所以对于像

这样定义的数组
float data[4][7];

循环条件

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

off by one。应该是

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

同样适用于for(gradLoop = 1; gradLoop &lt; 7; gradLoop++),初始索引值应以0开头。


评论后修改:

根据要求,5个学生7个等级,数组应该定义类似

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

那么,对于用法,学生的有效索引将是data[0]data[4],对于每个学生,成绩持有者将从data[i][0]data[i][6],其中0&lt;i&lt;5

【讨论】:

    猜你喜欢
    • 2019-05-04
    • 1970-01-01
    • 2020-06-29
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2017-05-27
    相关资源
    最近更新 更多