处理用户输入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;
}
答案 0 :(得分:1)
int intValue, menuSelect,Results;
因此Results
被声明为int
。
当你将它分配给你的函数结果时,它会被舍入/截断(可能不是你想要的,但只是问题的一部分)。
打印0.0
的事实是因为您在%lf
中使用的printf
格式与int
数据类型不匹配,并且未执行转换这里,因为printf
使用变量参数并信任调用者(虽然某些编译器会发出警告)。
的QuickFix:
double Results;
应该足够了。
答案 1 :(得分:0)
首先,您的程序确实有错误。
无论如何,为了回答你的问题,你的Shrink()
函数确实返回了一半的数字;问题是您将其保存在int
变量中,该变量无法取float
个数字。 (仅取小数点前的数字)。
您有两种选择:您可以将Results
声明为float
或double
,或直接打印您的函数结果,如下所示:
printf("%lf", Shrink(intValue));