[英]Inputting integer values into an Array in C
我試圖找出數組。 我在使用一維數組和多維數組時遇到同樣的問題,當我輸入值並嘗試稍后在代碼中返回值時,它返回錯誤的數字。
#include <stdio.h>
main ()
{
int arrayPrimary[2][2];
int x,y,a,b;
for(x=0; x<2; x++)
{
for (y=0; y<2; y++)
{
int* z;
*z==arrayPrimary[x][y];
printf("please enter a value for [%d][%d]:",x,y);
scanf("%d", &z);
}
}
for(a=0; a<2; a++)
{
for(b=0; b<2;b++)
{
printf ("The current value of [%d][%d] is:%d\n",a,b,arrayPrimary[a][b]);
}
}
return 0;
}
這部分代碼
int* z;
*z==arrayPrimary[x][y];
printf("please enter a value for [%d][%d]:",x,y);
scanf("%d", &z);
應該讀
printf("please enter a value for [%d][%d]:",x,y);
scanf("%d", &arrayPrimary[x][y]);
您還應該考慮檢查scanf
的返回值
這里有幾處錯誤。
首先,在要使用=
(賦值)的地方使用==
(比較)(這具有諷刺意味,考慮到人們反覆犯錯的頻率)。 這意味着*z
不會被初始化。 因此, z
本身從未初始化,因此您正在訪問垃圾內存。
當您嘗試將整數( "%d"
)寫入指針( z
)時,可能會發生錯誤。 請記住, scanf
一個指向您要將輸入寫入的位置的指針,因此,如果您的輸入是int
,則需要將一個指針傳遞給int
。 您正在傳遞一個指向int
的指針 。
這里的指針邏輯可能是您最困惑的地方,因此讓我們詳細了解一下:
arrayPrimary[x][y]
是一個整數,在內存中的地址與任何普通變量一樣。 scanf
需要知道該位置,以便將值寫入數組。 z
作為scanf
的參數。 但是,即使將arrayPrimary[x][y]
的值復制到z
指向的地址,z仍然是與數組不同的變量。 &z
)的內存地址&z
數組沒有任何關系。 當將&z
傳遞給scanf
, scanf
將查看該地址並將輸入內容寫入該地址。 因此,您要將輸入定向到z
,而不是數組。 嘗試這個:
for (y=0; y<2; y++)
{
int *z = &arrayPrimary[x][y];
printf("please enter a value for [%d][%d]:",x,y);
scanf("%d", z);
}
這樣,它是這樣的:
z
,該指針指向要更改的數據(即arrayPrimary[x][y]
)。 scanf
,它將輸入寫入z
指向的位置,即arrayPrimary[x][y]
。 但是,不需要單獨的指針。 您可以這樣寫:
for (y=0; y<2; y++)
{
printf("please enter a value for [%d][%d]:",x,y);
scanf("%d", &arrayPrimary[x][y]);
}
如果z已經是指向所需內存位置的指針,則在scanf;中使用&z
沒有意義。 只需使用z
。
(編輯:假設您按照注釋中的說明弄清楚了=)。
與您的行:
int *z;
您只需設置一個指向int
的指針即可。 在您的下一行中:
*z==arrayPrimary[x][y];
您首先取消引用該指針( *z
),所以您說“我現在要使用該指針所指向的值”。 接下來,您將該值與arrayPrimary[x][y]
進行比較,並且該比較的結果將被丟棄。 在這里,您的編譯器應該會發出警告,例如“語句無效”之類的警告。 因此,此行實際上什么也沒做。 嘗試:
int *z = &arrayPrimary[x][y];
而不是我談論的最后兩行。
#include<stdio.h>
#include<iostream>
int main ()
{
int arrayPrimary[2][2];
for(int i=0; i<2; i++)
{
for (int j=0; j<2; j++)
{
printf("Please Enter value for %d%d",i,j);
scanf("%d",&arrayPrimary[i][j]);
}
}
for(int i=0; i<2; i++){
for(int j=0; j<2;j++){
printf("%d",arrayPrimary[i][j]);
printf(" ");
}
printf("\n");
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.