C编程,使用for循环打印二维数组,cs50

C programming, printing 2D array using for loop, cs50

我的问题多于问题。我正在学习 CS50 计算机科学入门课程,遇到一些我不理解的东西,想知道是否可以发表意见。

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

#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("%i\t", 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

我的问题是 meaning/Where 最初打印的值是从哪里来的?这跟内存有关系吗?我的猜测是,在第一个 运行 中,我打印了一个不存在的数组中的值?谢谢您的任何回答,甚至是进一步阅读的建议,我们将不胜感激。

My question is what is the meaning/ Where did the originally printed values come from?

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


get_int 读作 one 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);
    }
}

进行此更改还可以让用户更清楚地看到在尝试一次输入所有六个时输入失败。然后重复提示以向用户发出重试信号。