我在浮点上测试编码并在单个函数中以打印方式显示它们,在使用它之后,我将其更改为模块化但我输入的浮点数之一不显示(例如输入为2.4,显示4部分但不是2)。
这是我正在处理
的代码#include <stdio.h>
int calculate (float change, int dollar, int cents)
{
scanf ("%f", &change);
dollar = (int) change;
cents = (int) (((change - dollar) * 100) + 0.5);
return (dollar, cents);
}
int display (int dollar, int cents)
{
printf("dollar is %d\n", dollar);
printf("cents is %d", cents);
return (0);
}
int main ()
{
float change;
int dollar, cents;
dollar = (int) change;
cents = calculate(change, dollar, cents);
display (dollar, cents);
return (0);
}
**它没有在printf中显示美元,我得到的只是0 **
答案 0 :(得分:1)
您可以使用指针获取变量的值。
cents = calculate(change, &dollar, ¢s);
这里传递的是美元和美分,其中包含可在主函数中访问的值的地址。
int calculate (float change, int* dollar, int* cents)
{
scanf ("%f", &change);
*dollar = (int) change;
*cents = (int) (((change - *dollar) * 100) + 0.5);
return (*dollar, *cents);
}
答案 1 :(得分:0)
请注意return (dollar, cents);
正在使用comma operator(因此请返回cents
)。
如果您希望calculate
返回两个值,则应声明struct
struct monetarytwoints_st {
int mon_dollars;
int mon_cents;
};
并让calculate
返回该类型,因此代码类似
struct monetarytwoints_st calculate(float change) {
int doll, cnts;
doll = (int) change;
cnts = (int) (((change - doll) * 100) + 0.5);
return (struct monetarytwoints_st) { doll, cnts };
}
你可能应该在一个函数中输入,在另一个函数中进行计算。从scanf
致电calculate
非常糟糕。
struct
两个数字是非常有效的; x86-64 ABI表示两个寄存器用于返回如此小的struct
。
请注意C使用call-by-value参数传递,因此调用函数中某些形式参数的任何更改都不会影响调用语句中调用站点的实际参数。