|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<math.h>
#include<cmath>
struct Location
{
int x;
int y;
int z;
};
void input (struct Location stastic,int i)
{
printf("请输入第%d个点的 x 坐标:",i);
scanf("%d",&stastic.x);
getchar();
printf("%d\n",stastic.x);
printf("请输入第%d个点的 y 坐标:",i);
scanf("%d",&stastic.y);
getchar();
printf("%d\n",stastic.y);
printf("请输入第%d个点的 z 坐标:",i);
scanf("%d",&stastic.z);
getchar();
printf("%d\n",stastic.z);
}
float deal(struct Location a,struct Location b)
{
int i,l,m;
float num;
printf("%d\n",a.x );
printf("%d\n",b.x );
i=abs(a.x -b.x );
printf("%d\n",a.y );
printf("%d\n",b.y );
l=abs(a.y -b.y );
printf("%d\n",a.z );
printf("%d\n",b.z );
m=abs(a.z -b.z );
num=pow((pow(i,2)+pow(l,2)+pow(m,2)),1.0/2);
return num;
}
int main(void)
{
int i;//录入的数据数量
int k;//用于迭代
int m,n;//用于迭代
int num;//用与接收函数的返回值
struct Location stastic[i];
printf("请输入需要录入的数据数量:");
scanf("%d",&i);
for(k=0;k<i;k++)
{
input(stastic[k],k+1);
}
for(m=1;m<=i-1;m++)
{
for(n=m+1;n<=i;n++)
{
num=deal(stastic[m-1],stastic[n-1]);
printf("第% d 个点和第% d 个点之间的距离大小为:%.2f\n",m,n,num);
}
}
return 0;
}
这个问题是由于你在函数中改变了结构体变量的值,但是你使用的是值传递而不是引用传递,因此主函数中的结构体变量的值并没有改变。
在你的 input 函数中,你应该使用指针来改变原始结构体的值,而不是传递结构体的副本。你可以使用结构体指针,然后通过这个指针来改变原始结构体的值。这是你的代码应该如何修改:
#include<stdio.h>
#include<math.h>
struct Location
{
int x;
int y;
int z;
};
void input (struct Location *stastic,int i) // 修改这里,使用指针
{
printf("请输入第%d个点的 x 坐标:",i);
scanf("%d",&stastic->x);
getchar();
printf("%d\n",stastic->x);
printf("请输入第%d个点的 y 坐标:",i);
scanf("%d",&stastic->y);
getchar();
printf("%d\n",stastic->y);
printf("请输入第%d个点的 z 坐标:",i);
scanf("%d",&stastic->z);
getchar();
printf("%d\n",stastic->z);
}
float deal(struct Location a,struct Location b)
{
int i,l,m;
float num;
printf("%d\n",a.x );
printf("%d\n",b.x );
i=abs(a.x -b.x );
printf("%d\n",a.y );
printf("%d\n",b.y );
l=abs(a.y -b.y );
printf("%d\n",a.z );
printf("%d\n",b.z );
m=abs(a.z -b.z );
num=sqrt((pow(i,2)+pow(l,2)+pow(m,2)));
return num;
}
int main(void)
{
int i;//录入的数据数量
int k;//用于迭代
int m,n;//用于迭代
float num;//用于接收函数的返回值
printf("请输入需要录入的数据数量:");
scanf("%d",&i);
struct Location stastic[i];
for(k=0;k<i;k++)
{
input(&stastic[k],k+1); // 修改这里,使用地址
}
for(m=1;m<=i-1;m++)
{
for(n=m+1;n<=i;n++)
{
num=deal(stastic[m-1],stastic[n-1]);
printf("第% d 个点和第% d 个点之间的距离大小为:%.2f\n",m,n,num);
}
}
return 0;
}
这样,你在 input 函数中通过指针改变的结构体值就会反映到主函数中的原始结构体上。
|
|