-10

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

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

4

3 回答 3

5

if (radius = 0) should be if (radius == 0)

于 2013-08-28T06:08:19.963 回答
4

This:

#define PI=3.14

Should be this:

#define PI 3.14

Also you have an assignment in if comparison: if (radius = 0), should be if (radius == 0). Moreover, you shouldn't compare float or double like this.

于 2013-08-28T06:09:08.397 回答
2

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

if (radius = 0)

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

if (radius = 0)

计算结果为零,或false. 作为分配的“副作用”(这是技术术语),它radius的值也为零。在这种情况下,副作用当然是不幸的和无意的。

因此,正如其他人所指出的那样,您想要的是关系运算符==

if (radius == 0)

这也是一个带有值的表达式:它的计算结果为trueor false,这就是你想要的。

于 2013-08-28T06:14:00.770 回答