簡體   English   中英

在C語言中將整數值輸入到數組

[英]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數組沒有任何關系。 當將&z傳遞給scanfscanf將查看該地址並將輸入內容寫入該地址。 因此,您要將輸入定向到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] )。
  • 您傳遞此數據yo 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.

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