C编程,使用for循环打印2D阵列,cs50



我有更多的问题。我正在做CS50计算机科学入门课程,遇到了一些我不理解的事情,想知道我是否能得到意见。

我正在打印一个2D数组,这是我的代码和第一个结果。

#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main (void)
{
int a[2][3], i, j;
//collecting values for matrix
//rows
for (i = 0; i < 2; i++)
{
//columns
for (j = 0; j < 3; j ++)
{
get_int("Pls provide values for matrix: ");
}
}
//printing the matrix
for (i = 0; i < 2; i ++)
{
for (j = 0; j < 3; j ++)
{
printf("%it", a[i][j]);
}
printf("n");
}
}

我在终端中输入以下内容作为响应:1 2 3 4 5 6这导致了这样的反应:

0       0       4198480                            
0       -1885555216     32767

我将get_int()行更改为以下行,以获得我最初期望的内容:

a[i][j] = get_int("Pls provide values for matrix: ");

变更后的预期实际结果:

1       2       3
4       5       6

我的问题是什么意思/最初印刷的价值观是从哪里来的?这和记忆有关吗?我的猜测是,在第一次运行中,我打印了一个不存在的数组中的值?感谢您的任何回答,甚至建议,以便进一步阅读,我们将不胜感激。

我的问题是什么意思/最初打印的值来自哪里?

它来自未初始化的int a[2][3]的读取。这样做会使程序具有未定义的行为。您可以初始化它以获取所有0的:int a[2][3] = {0};


get_int读取一个int,因此您提供的输入提示具有误导性。不能同时输入所有6个值。逐一输入:

for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j ++)
{
a[i][j] = get_int("Please provide a value for [%d][%d]: ", i, j);
}
}

做出这一改变也让用户更清楚地看到,当试图同时输入所有六个时,输入失败。然后重复该提示以向用户发出再次尝试的信号。

最新更新