繁体   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