我终于得到了我的更改程序来打印出一些数字,而不是抛出一个浮点异常。但是,现在它稍微偏了。程序只选择一分钱,而不是给出2分,1分钱,1分钱和2分钱,我无法弄清楚为什么要对代码的条件或结构进行检查。我在每个if语句中添加了一些检查,但即使是打印出来也没有,我现在非常困惑......
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int changeF(float change, float div)
{
int c = change/div;
return c;
}
int main(void)
{
printf("Enter the bill amount:");
float bill = GetFloat();
printf("Enter the payment amount:");
float payment = GetFloat();
float q = .25; float di = .1; float n = .05; float p = .01;
float change = payment - bill;
do
{
if (bill >= 0.0 && payment >= 0.0 && change >= 0.0)
{
if (change >= q)
{
int quarters = changeF(change, q);
printf("%d quarters\n", quarters);
change = change - (.25*quarters);
}
if (change >= di)
{
int dimes = changeF(change, di);
printf("%d dimes\n", dimes);
change = change - (.1*dimes);
}
if (change >= n)
{
int nickels = changeF(change, n);
printf("%d nickels\n", nickels);
change = change - (.05*nickels);
printf("%f change", change);
}
if (change >= p)
{
int pennies = changeF(change, p);
printf("%d pennies\n", pennies);
change = change - (.01*pennies);
printf("%f", change);
}
}
}
while (change > 0.0);
}
答案 0 :(得分:3)
通过在字符串末尾添加换行符再试一次:
printf("Enter the bill amount:\n");
原因:stdout
是行缓冲的,你需要给它一个新行来刷新输出。
或者fflush(stdout);
显式刷新它。
答案 1 :(得分:2)
不要考虑美元,而是以美分计算,并使用整数运算来计算。您仍然可以让用户通过舍入来输入美元金额:
int bill = GetFloat() * 100 + 0.5;
值的常数当然也是整数,即25,10,5和1。
然后你的changeF
函数只是一个整数除法。 (对于便士,你可以放弃一个除法 - 只需更换剩余的便士。)
您甚至不需要do
... while
循环。仅进行一次计算就足够了。寻找宿舍,角钱和镍币,剩下的就是便士。完成。无需重新迭代。