我是一位非常有经验的Java程序员,具有C ++背景,但我只是在我的一个编程课程中开始使用C,这让我很疯狂。这是第一个任务。它应该计算球体的体积或表面积。问题是“半径”等于零,即使用户输入了值。 “模式”工作得很好,这似乎很奇怪。这是代码:
#include <stdio.h>
#define PI 3.14
int main()
{
float radius;
int mode;
printf("\nPlease enter a non-negative radius of a sphere: ");
scanf("%f", &radius);
printf("Please enter 1 for volume, 2 for area: ");
scanf("%d", &mode);
if (radius = 0)
{
printf("\n\nPlease enter a positive radius, instead of %f.", radius);
}
else
{
float area = 4 * PI * radius * radius;
float volume = (4.0f / 2.0f) * PI * radius * radius * radius;
float result = 0;
if(mode == 1)
{
printf("\n\nYou are computing volume.");
result = volume;
}
else
{
printf("\n\nYou are computing area.");
result = area;
}
printf("\n\nThe result is %2f", result);
}
fflush(stdin);
getchar();
return 0;
}
知道为什么半径没有正确存储?仅供参考 - 大部分代码都是预先编写的。我只是应该找到错误。
答案 0 :(得分:5)
if (radius = 0)
应为if (radius == 0)
答案 1 :(得分:4)
此:
#define PI=3.14
应该是这样的:
#define PI 3.14
此外,您在if
比较中有一项作业:if (radius = 0)
,应为if (radius == 0)
。此外,您不应比较float
或double
like this。
答案 2 :(得分:2)
在C中,=
是赋值运算符,==
是关系运算符。当你写
if (radius = 0)
您为<{1}}分配零。在C中,该赋值是一个表达式,并且具有值。赋值表达式计算分配给表达式左侧的值。在这种情况下,由于您分配的是零,因此整个赋值的值为零,并且
radius
评估为零,或if (radius = 0)
。作为赋值的“副作用”(即技术术语),false
也会得到零值。当然,在这种情况下,副作用是不幸和无意的。
正如其他人所指出的那样,你想要的是关系运算符radius
:
==
这也是一个带有值的表达式:它的计算结果为if (radius == 0)
或true
,这就是你想要的。