我正在为科学家,工程师和#34;制作一个C ++代码。课程。我们正在完成这本书。我一直在浏览论坛,并在那里找到了很多帮助。谢谢大家这个惊人的资源。我想向小组提出我的第一个问题进行分析。
该项目的目标是
我把所有东西放在一起,它几乎完整。当我看到即使您只输入6名学生的成绩时,我也有一点雄心勃勃,它会输出60行0。如果有零,我终于得到它停止打印成绩,但现在它停止打印一行短。
例如,如果我输入5名学生的成绩,它只输出第4名学生并且输掉第5名。一旦我解决了这个问题,我就完成了。我将添加一个switch语句,允许教师查看HIS想要的初始输入或运行我的代码。
synchronized (this){
// ...
}
答案 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;
//...
}
您的代码还有其他问题:
i
和j
- 您的代码在一个地方使用本地,而在另一个地方使用全局。摆脱全局变量并在函数i
和j
std::vector
- 在C ++中,您几乎总是使用std::vector
而不是数组。1
索引数组 - 绝对没有必要这样做。grade_Calc
不计算成绩,计算平均值并将数据输出到屏幕。你可以将它们分成至少两个不同的功能。4.0
或0.2
或者其他什么而没有深入研究你的程序的逻辑