【发布时间】:2016-11-22 14:08:49
【问题描述】:
我正在编写一个程序,该程序接受输入并打印出最少使用的硬币数量。当我运行程序并输入输入时,它无法按预期工作并且不打印任何内容。我在这里做错了什么?
#include <stdio.h>
#include <cs50.h>
int main (void)
{
float f = 0;
int count = 0;//number of coins
do
{
printf("How much change is owed?\n");
f = GetFloat();
}
while (f < 0);
//Convert to cents
f = f * 100;
while (f > 0)
{
if (f > 25)
{
f = f - 25;
count++;
}
else if (f > 10)
{
f = f - 10;
count++;
}
else if (f > 5)
{
f = f - 5;
count++;
}
else if (f > 1)
{
f = f - 1;
count++;
}
}
printf("%d", count);
}
【问题讨论】:
-
这可能是一个无限循环。注意间隙(提示:与整数不同)
-
根据条件,您的第二个循环可能是无限的,因为 f 是一个浮点数(在循环结束时打印 f 的浮点值)
-
要转换成美分,最好四舍五入到最接近的整数
f = rintf(f * 100);或f = roundf(f * 100); -
因为
f是一个浮点数,所以所有值也应该是浮点数。 IE。 100 应该是 100.f 等等等等 -
所需的零钱可能远远超过 99 美分,因此计算应包括 100、60、20、10、5 和 1 美元的钞票加上 50 美分的钞票。为了使输出更有意义,强烈建议跟踪每种找零钞票或硬币的计数并输出这些计数