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