C - Division返回零

时间:2017-03-19 20:13:27

标签: c

处理用户输入int的赋值,然后使用1来获取正方形,2用于立方体,3用于除以2。无法弄清楚为什么我的收缩函数总是返回零。

#include <stdio.h>
// Function prototypes
int Square(int value);
int Cube(int value);
double Shrink(int value);

int main ()
{
    /* variable definition: */
    int intValue, menuSelect,Results;
    intValue = 1;
    // While a positive number
    while (intValue > 0)
    {
        printf ("Enter a positive Integer\n: ");
        scanf("%d", &intValue);
        if (intValue > 0)
        {
            printf ("Enter 1 to calculate Square, 2 to Calculate Cube, 3 to divide     integer in half \n: ");
            scanf("%d", &menuSelect);

            if (menuSelect == 3)
            {
                // Call the shrink function

                Results = Shrink(intValue);
                printf("Half of %d is %lf\n",intValue,Results);
            }
            else
                printf("Invalid menu item, only 1,2 or 3 is accepted\n");
        }
    }
    return 0;
}

/* function returning half of a number */
double Shrink(int value)
{
    return (double) value/2.0;
}

2 个答案:

答案 0 :(得分:1)

int intValue, menuSelect,Results;

因此Results被声明为int

当你将它分配给你的函数结果时,它会被舍入/截断(可能不是你想要的,但只是问题的一部分)。

打印0.0的事实是因为您在%lf中使用的printf格式与int数据类型不匹配,并且未执行转换这里,因为printf使用变量参数并信任调用者(虽然某些编译器会发出警告)。

的QuickFix:

double Results;

应该足够了。

答案 1 :(得分:0)

首先,您的程序确实有错误。 无论如何,为了回答你的问题,你的Shrink()函数确实返回了一半的数字;问题是您将其保存在int变量中,该变量无法取float个数字。 (仅取小数点前的数字)。 您有两种选择:您可以将Results声明为floatdouble,或直接打印您的函数结果,如下所示:

printf("%lf", Shrink(intValue));