我的問題多于問題。我正在做計算機科學課程的 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
我的問題是什么意思/最初列印的值來自哪里?這和記憶有關嗎?我的猜測是,在第一次運行中,我從一個不存在的陣列中列印了值?感謝您的任何回答甚至進一步閱讀的建議將不勝感激
uj5u.com熱心網友回復:
我的問題是什么意思/最初列印的值是從哪里來的?
它來自int a[2][3]未初始化的讀取。這樣做會使您的程式具有未定義的行為。您可以初始化它以獲取所有0's :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);
}
}
進行此更改還使用戶更明顯的是,嘗試一次輸入所有六個時輸入失敗。然后重復提示以向用戶發出再次嘗試的信號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405958.html
標籤:
上一篇:如何索引9x9數獨板的3x3子塊
下一篇:intarr[]是有效的C 嗎?
