为什么我的程序编译但没有做任何事情?

时间:2017-04-15 01:57:25

标签: c for-loop multidimensional-array

所以我正在研究一个程序,我正在用这样的零初始化一个二维数组:

  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]);

这会在控制台中编译但不会执行任何操作,并且不会超过此点。

我已经看了很长时间,但我无法破解它。 谢谢!

编辑:对不起,我忘了在代码下面加一行来打印数组中的位置,但程序没有通过循环。

3 个答案:

答案 0 :(得分:2)

你所展示的问题是循环中的<=。由于数组从0开始,最后一个可寻址位置为n-1,其中n是循环的大小。所以你肯定会超越数组的范围。这会在某个时候引起问题。此外,您没有声明ij,但这可能会被编译器捕获,因此您必须在某处。

至于为什么你看不到任何输出,你上面的代码中没有任何内容可以打印任何内容。

你需要一个循环来打印结果。这样的事情。

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将数组的内容打印到控制台来包含预处理程序指令。