【问题标题】:Why is my program compiling but not doing anything? [closed]为什么我的程序正在编译但什么也没做? [关闭]
【发布时间】:2017-04-15 01:57:24
【问题描述】:

所以我正在开发一个程序,我正在用零初始化一个二维数组,如下所示:

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

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

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

编辑:抱歉,我忘记在代码下方添加一行以打印出数组中的位置,但程序没有通过循环。

【问题讨论】:

标签: c for-loop multidimensional-array


【解决方案1】:

您所显示的问题是循环中的&lt;=。由于数组是从 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]);
   }
}  

【讨论】:

  • 遗憾的是,在最微不足道的调试尝试之后,有些东西会很明显,就像你所做的那样将 printf 放入循环中。
【解决方案2】:

...但在控制台中不做任何事情...

您希望它在控制台中做什么?在您提供的代码 sn-p 中,您永远不会调用打印语句或从标准输入读取。

请注意,这是不正确的循环:

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,我不知道,因为提供的代码 sn-p 从未尝试与控制台交互。

【讨论】:

    【解决方案3】:

    我假设您的意思是您希望从上面发布的代码中获得某种输出。您的代码中没有任何内容,例如将输出写入控制台的 printf。为此,您必须通过执行 #include &lt;stdio.h&gt; 来包含预处理器指令,然后使用 printf 将数组的内容打印到控制台。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-02
      • 2015-12-09
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      相关资源
      最近更新 更多