【发布时间】:2014-11-01 12:04:13
【问题描述】:
我需要有关如何将变量的地址与整数进行比较的帮助。 //或者比较指针和整数的情况。//
要求程序应该有一个带有初始化值的数组。程序应同时显示值和值的地址。然后程序要求用户输入用户想要更改的值的地址。我想显示一条错误消息,例如“输入无效!”当程序检测到输入的地址不在可用地址中时。
样本输出应该是:
data[1] = 11
data[2] = 22
data[3] = 33
data[4] = 44
address[1] = 2538816
address[2] = 2538820
address[3] = 2538824
address[4] = 2538828
enter address: 2538888
Invalid Input!
我已经创建了代码,它可以工作,但它给了我一个警告,因为我将其转换错误(而且我知道转换不适合我的需要)。 我唯一的重点是:
- 用户从可用地址中将地址输入到 int 变量中。
- 应将用户输入的地址与可用地址进行比较。 (这就是问题)
- 如果输入的地址在可用地址中,则用户将更改存储在用户输入的地址上的值。
- 如果不是,程序应该显示无效输入!
另外,程序的一个要求是当“程序要求用户输入一个地址。地址存储在一个临时的 int 变量中,然后复制到整数指针。”
main()
{
int var = 4, temp;
int data[5]={11, 22, 33, 44};
int* pVar;
pVar = &var;
char choice;
void display(int, int*);
while(1)
{
display(var,data);
while(1)
{
printf("\nEnter address: ");
scanf("%d", &temp);
int check=0;
for(int i=0; i<4; i++)
{
if((int*)temp==&data[i])
{
check=1;
break;
}
}
if(check==1)
{
*pVar = temp;
break;
}
else
{
printf("Invalid Input!\n");
}
}
printf("Enter integer: ");
scanf("%d", *pVar);
display(var,data);
while(1)
{
getchar();
printf("\n\nDo you want to restart? [Y] Yes or [N] No: ");
scanf("%c", &choice);
if(choice=='Y'||choice=='y'||choice=='N'||choice=='n')
{
break;
}
else
{
printf("Invalid Input!\n");
}
}
if(choice=='N'||choice=='n')
{
break;
}
}//endline13
system("PAUSE");
}
void display(int var, int data[4])
{
system("cls");
printf("Values---------------------------*\n\n");
printf("var = %d\n\n", var);
for(int i=0; i<4; i++)
{
printf("data[%i] = %i\n", i, data[i]);
}
printf("\nAddresses---------------------------*\n\n");
printf("Address of variable = %d\n\n", &var);
for(int i=0; i<4; i++)
{
printf("Address of data[%i] = %i\n", i, &data[i]);
}
}
【问题讨论】:
-
这看起来应该标记为 C,而不是 C++。
-
看起来这行是你的问题:
*pVar = temp; -
其实我的问题是这个
(int*)temp==&data[i]) -
Louie,之前有人问过非常相似的问题,例如here。将用户输入的整数转换为指针的结果有些不可预测(即,它是实现定义的)。因此,让用户直接输入地址并不是一个好主意。为什么不让用户简单地从地址列表中选择(即当用户输入“1”时,您使用列表中的第一个地址,“2”为第二个,等等)?
-
@jogojapan thnx 寻求帮助。但是在我们的编程类中,我们的程序需要输入需要更改的值的地址。 :(
标签: c pointers integer compare