为什么用户输入变量导致0-C?

时间:2013-08-28 06:06:09

标签: c variables zero

我是一位非常有经验的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; 
}

知道为什么半径没有正确存储?仅供参考 - 大部分代码都是预先编写的。我只是应该找到错误。

3 个答案:

答案 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)。此外,您不应比较floatdouble like this

答案 2 :(得分:2)

在C中,=是赋值运算符,==是关系运算符。当你写

if (radius = 0)

为<{1}}分配零。在C中,该赋值是一个表达式,并且具有值。赋值表达式计算分配给表达式左侧的值。在这种情况下,由于您分配的是零,因此整个赋值的值为零,并且

radius

评估为零,或if (radius = 0) 。作为赋值的“副作用”(即技术术语),false也会得到零值。当然,在这种情况下,副作用是不幸和无意的。

正如其他人所指出的那样,你想要的是关系运算符radius

==

这也是一个带有值的表达式:它的计算结果为if (radius == 0) true,这就是你想要的。