一个程序的变量问题 请教各位高手

来源:百度知道 编辑:UC知道 时间:2024/07/07 09:47:02
void GetInput(int a,int b,int c)
{
printf("Enter 3 integers which are sides of a triangle\n");
scanf("%d%d%d",&a,&b,&c);
printf("Side A is %d\n",a);
printf("Side B is %d\n",b);
printf("Side C is %d\n",c);
}

int IsATriangle(int a,int b,int c)
{
if((a<(b+c))&&(b<(a+c))&&(c<(a+b)))
return 1;
else
return 0;
}

void DetermineTriangleType(int a,int b,int c)
{
if(IsATriangle(a,b,c))
{
if((a==b)&&(b==c))
printf("Equilateral\n");
else if((a!=b)&&(a!=c)&&(b!=c))
printf("Scalene\n");
else
printf("Isosceles\n");
}
else
printf("Not a Triangle\n");
}

main()
{
int a,b,c;
GetInput(a,b,c);
DetermineTriangleType(a,b,c);
}

上面的程序 我无论输什么数字它的结果

原因是因为a,b,c三个变量是在main函数里面声明的。
可以把他叫做[a,b,c][1]
你在调用GetInput的时候,a,b,c分别作为参数传递进去,这个时候,程序会复制a,b,c三个变量一次,复制出来的a,b,c是局部变量,可以把他叫做[a,b,c][2]。
在函数里面进行运算的都是[a,b,c][2],你输入的三个数字都赋值到了[a,b,c][2]里面。
但是在函数结束的时候,程序不会将局部变量[a,b,c][2]的值在传递给外面的[a,b,c][1],所以赋值失败了,自然会都是输出not a triangle

解决方法1是将a,b,c作为返回值来返回。
这里牵涉到同时返回多个值,可以用一个结构体来解决。
在最前面定义
struct Triangle
{
int a;
int b;
int c;
}

把void GetInput(int a,int b,int c)
改成
Triangle GetInput(int a,int b,int c)
{
printf("Enter 3 integers which are sides of a triangle\n");
scanf("%d%d%d",&a,&b,&c);
printf("Side A is %d\n",a);
printf("Side B is %d\n",b);
printf("Side C is %d\n",c);
struct Triangle aaa; //这里定义结构体
aaa.a = a;
aaa.b = b;
aaa.c = c;//这里赋值
return aaa; //这里返回
}
main()函数里面可以改写成如下
{
int a,b,c;
struct Triang