[英]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.