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);
}
上面的程序 我无论输什么数字它的结果都是“Not a Triangle\n”
就是说IsATriangle(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 Triangle aaa = GetInput(a,b,c);
a = aaa.a;
b = aaa.b;
c = aaa.c; //这边重新赋值给a,b,c
DetermineTriangleType(a,b,c);
}
解决方法2是直接使用引用来解决这个问题
把void GetInput(int a,int b,int c)
改成void GetInput(int& a,int& b,int& c)
这样在参数传递进函数的时候程序不会进行复制这个步骤,函数内部的赋值才可以成功。