数组未能过早输出一行

时间:2017-03-12 07:02:25

标签: c++ arrays

我正在为科学家,工程师和#34;制作一个C ++代码。课程。我们正在完成这本书。我一直在浏览论坛,并在那里找到了很多帮助。谢谢大家这个惊人的资源。我想向小组提出我的第一个问题进行分析。

该项目的目标是

  1. 创建一个60row by 7column数组。
  2. 每名学生必须能够获得4个成绩,给他们一个简单的平均分和加权平均分。
  3. 输出成绩和平均值。
  4. 我把所有东西放在一起,它几乎完整。当我看到即使您只输入6名学生的成绩时,我也有一点雄心勃勃,它会输出60行0。如果有零,我终于得到它停止打印成绩,但现在它停止打印一行短。

    例如,如果我输入5名学生的成绩,它只输出第4名学生并且输掉第5名。一旦我解决了这个问题,我就完成了。我将添加一个switch语句,允许教师查看HIS想要的初始输入或运行我的代码。

    synchronized (this){
        // ...
    }
    

2 个答案:

答案 0 :(得分:1)

在C ++中,数组是零索引的。

将您的开始更改为i = 0;

同样在你的迭代中:

for (j=1; j<MAXCOLS; j++)

j也应该从0开始。

(在整个代码中继续使用此逻辑......看起来有更多地方。)

答案 1 :(得分:0)

grade_Calc中的外部循环使用全局j,在输入成绩后它不会归零,因此它等于5

外部循环中的检查将一直传递到最后一行,因为grades[i][5]为您提供了下一行的第一个值(它确实触发了未定义的行为,但在这种特殊情况下,它似乎正常工作< / em>的)。在最后一次迭代中,该值为0,因此在打印前会中断。

变化:

for (int j = 0; j < MAXCOLS; j++)

为:

for (; j < MAXCOLS; j++)

并提出:

int j = 0;

作为外循环中的第一行,所以:

for (int i = 1; i < MAXROWS; i++)
{
    int j = 0;
    //...
}

您的代码还有其他问题:

  1. 您拥有全球和本地ij - 您的代码在一个地方使用本地,而在另一个地方使用全局。摆脱全局变量并在函数
  2. 中本地声明ij
  3. 使用常规数组而不是std::vector - 在C ++中,您几乎总是使用std::vector而不是数组。
  4. 您正在从1索引数组 - 绝对没有必要这样做。
  5. grade_Calc不计算成绩,计算平均值并将数据输出到屏幕。你可以将它们分成至少两个不同的功能。
  6. 通常变量名称可能会更好,因为所有这些缩写都难以阅读。
  7. 代码应该是自我记录的。不应该对每一行进行评论。
  8. 很多魔法数字 - 当别人读你的代码时,他不知道为什么它是4.00.2或者其他什么而没有深入研究你的程序的逻辑