我想创建一个函数,该函数可以计算圆的表面积。
#define pi 3,14159265
float FI (float r);
float FI (float r) {
float x;
x = pi * (r * r); //pi is defined at the beginning. I cut the "head"
return x;
}
FI
返回3不管我给它什么输入。
请帮助我。我真的不知道该怎么办。
编辑:将FI
更改为返回int
而不是float
。
答案 0 :(得分:5)
您编写的函数FI
返回一个int
。这意味着无论计算出什么值,都会被截断-例如,将3.14159转换为3。要解决此问题,请将返回类型更改为float
。
不幸的是,您对pi
的定义是错误的。您使用的是,
分隔整数和小数部分的欧洲惯例,而C使用了.
分隔整数和小数部分的美国惯例。将pi
的定义更改为使用点而不是逗号。
答案 1 :(得分:4)
#define pi 3.14159265 // use a `.` here
float FI (float r);
float FI (float r) {
float x;
x = pi * (r * r);
return x;
}
您需要更改pi
才能使用.
,而不是欧洲的,
。
对那些好奇的人的解释:
在C中,逗号用于所谓的“逗号运算符”。它接受两个表达式a, b
,并从左到右对其求值,然后返回右表达式(b
)的结果。
所以在您的情况下:
x = pi * (r * r);
扩展为:
x = 3,14159265 * (r * r);
哪个C读为:
(x = 3), 14159265 * (r * r);
也就是说,将3分配给x
,然后将多个3一起分配。
这说明了为什么您总是得到3。
Wikipedia将对逗号运算符进行更深入的说明: https://en.wikipedia.org/wiki/Comma_operator