![](/img/trans.png)
[英]CS50 / BEGINNER - Segmentation fault in nested for loop in C
[英]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]
讀取。 這樣做會使您的程序具有未定義的行為。 您可以將其初始化為全部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);
}
}
進行此更改還使用戶更明顯的是,嘗試一次輸入所有六個時輸入失敗。 然后重復提示以向用戶發出再次嘗試的信號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.