簡體   English   中英

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

我將 *** *** 行更改為以下內容以獲得我最初的預期:

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

更改后的預期實際結果:

1       2       3
4       5       6

我的問題是什么意思/最初打印的值來自哪里? 這與 memory 有關嗎? 我的猜測是,在第一次運行中,我從一個不存在的數組中打印了值? 感謝您的任何回答甚至進一步閱讀的建議將不勝感激

我的問題是什么意思/最初打印的值是從哪里來的?

它來自未初始化的int a[2][3]讀取。 這樣做會使您的程序具有未定義的行為 您可以將其初始化為全部0int 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);
    }
}

進行此更改還使用戶更明顯的是,嘗試一次輸入所有六個時輸入失敗。 然后重復提示以向用戶發出再次嘗試的信號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM