所以我正在研究一个程序,我正在用这样的零初始化一个二维数组:
int studentGrades[3][2];
for(i = 0; i <= 3; i++){
for(j = 0; j <= 2; j++){
studentGrades[i][j] = 0;
}
}
printf(" %d", studentGrades[1][2]);
这会在控制台中编译但不会执行任何操作,并且不会超过此点。
我已经看了很长时间,但我无法破解它。 谢谢!
编辑:对不起,我忘了在代码下面加一行来打印数组中的位置,但程序没有通过循环。答案 0 :(得分:2)
你所展示的问题是循环中的<=
。由于数组从0开始,最后一个可寻址位置为n-1
,其中n
是循环的大小。所以你肯定会超越数组的范围。这会在某个时候引起问题。此外,您没有声明i
或j
,但这可能会被编译器捕获,因此您必须在某处。
至于为什么你看不到任何输出,你上面的代码中没有任何内容可以打印任何内容。
你需要一个循环来打印结果。这样的事情。
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 2; j++) {
print("Grade[%d][%d]: %d\n", i, j, studentGrades[i][j]);
}
}
答案 1 :(得分:1)
...但在控制台中没有做任何事......
您期望在控制台中做什么?您永远不会在您提供的代码段中调用print语句或从stdin读取。
作为抬头,这是不正确的循环:
int studentGrades[3][2];
for(i = 0; i <= 3; i++){
for(j = 0; j <= 2; j++){
studentGrades[i][j] = 0;
}
}
您的数组是3x2,因此您无法访问索引studentGrades[3]
或studentGrade[AnyNumber][2]
。您的可访问索引范围对于行为0-2,对于列为0-1。因此,你的循环应该是:
int studentGrades[3][2];
for(i = 0; i < 3; i++){
for(j = 0; j < 2; j++){
studentGrades[i][j] = 0;
}
}
至于为什么你没有得到控制台I / O,我不知道,因为提供的代码片段不会尝试与控制台交互。
答案 2 :(得分:1)
我假设您的意思是您希望从上面发布的代码中获得某种输出。您的代码中没有任何内容,例如将输出写入控制台的printf。为此,您必须通过执行#include <stdio.h>
然后使用printf将数组的内容打印到控制台来包含预处理程序指令。