在C中将整数值输入到数组中

时间:2013-12-28 05:13:45

标签: c arrays integer

我试图弄清楚数组。我对单维数组和多维数组有同样的问题,当我输入值并尝试在代码中稍后返回该值时,它会返回错误的数字。

#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;
}

5 个答案:

答案 0 :(得分:3)

这部分代码

  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

的返回值

答案 1 :(得分:3)

这里有几个问题。

首先,你使用==(比较),你打算使用=(赋值)(这是相当具有讽刺意味的,考虑到人们反对这种错误的频率)。这意味着永远不会初始化*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]);
}

答案 2 :(得分:0)

如果z已经是指向所需内存位置的指针,那么在scanf中使用&z是没有意义的。只需使用z

(编辑:假设你在评论中指出了你的理顺。)

答案 3 :(得分:0)

用你的专栏:

int *z;

您只需设置指向int的指针即可。在下一行:

*z==arrayPrimary[x][y];

你首先取消引用指针(*z),所以你说'我现在想要使用该值,指针指向'。接下来,将该值与arrayPrimary[x][y]进行比较,并放弃该比较的结果。在这里,您应该得到编译器的警告,例如“声明无效”等。所以这条线实际上什么也没做。 尝试:

int *z = &arrayPrimary[x][y];

而不是我谈到最后几行的两行。

答案 4 :(得分:0)

#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;
}