所以我调整了代码,似乎减去了一个缺陷 . 收缩现在是一个浮动,但没有返回正确的答案 . 当我试图缩小9例如它返回4.0而不是4.5 ...... 13返回6.0?新代码如下:
包括
int main()
{
/ 变量定义: /
int intValue,menuSelect,Results;浮动sResults;
intValue = 1;
//虽然是正数
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, Enter 3 to Calculate Shrink \n: ");
scanf("%d", &menuSelect);
if (menuSelect == 1)
{
// Call the Square Function
Results = Square(intValue);
printf("Square of %d is %d\n",intValue,Results);
}
else if (menuSelect == 2)
{
// Call the Cube function
Results = Cube(intValue);
printf("Cube of %d is %d\n",intValue,Results);
}
else if (menuSelect == 3)
{
sResults = Shrink(intValue);
printf("shrink of %d is %f\n", intValue,sResults);
}
else
printf("Invalid menu item, only 1 or 2 or 3 is accepted\n");
}
}
返回0;
}
/ 函数返回数字的平方 /
int Square(int value)
{
返回值*值;
}
/ 函数返回数字的立方体 /
int Cube(int value)
{return valuevaluevalue;
}
int收缩(int值)
{
return value*1/2;
}
1 回答
您将结果存储在
Results
中,但随后打印sResults
. 这是两个不同的变量,sResults
仍为零,因为它尚未赋值 . 在printf
语句中将sResults
更改为Results
.但是,因为你得到的结果被截断为一个整数:
Shrink(5)
将返回2.要解决这个问题,你需要更改Shrink
以取一个float
参数而不是int
,返回float
而不是int
,然后分配其结果到sResult
而不是Result
.此外,您可能会收到有关
Square
,Cube
和Shrink
函数未声明的编译器警告 . 之所以发生这种情况,是因为调用函数的代码位于代码之前,而代码就是它们的代码 . 它还没有给你带来实际问题,因为编译器通过假设每个函数都采用int
参数并返回int
结果来处理这种情况,这恰好恰好是真的 . 但是如果你改变任何函数来操作float
而不是int
,你的程序将会中断,因为调用仍然会被编译为int
.将三个数学函数移到
main
上方,或将它们保留在底部并将这些行放在main
之前:这些被称为声明,它们告诉编译器函数操作的类型,因此它知道如何在它们看到它们的实现之前处理它们 . 如果更改要在
float
而不是int
上操作的函数,请将声明更改为匹配 .