【发布时间】:2019-01-26 15:17:15
【问题描述】:
我是编码新手,我一直在尝试 CS50 的问题 cash.c。在这个问题中,收银员必须分别使用 25、10、5 和 1 美分提供最少的找零次数。
我在输出时遇到了问题,我只提到了关于使用 25 和 10 美分的问题。对于 2.2,我应该得到 10 的答案,这就是我得到的,但是对于 4.2,我应该得到 18,我得到的答案是 22。为什么会这样?
我们将不胜感激有用的建议和建设性的批评。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int clear_buffer()
{
int c;
while((c=getchar())!='\n' && c!=EOF);
}
int main(void)
{
fflush(stdin);
float a=0,b=0,c=0,d=0,e=0;
float n;
do
{
printf("The change is ");
}
while ((scanf("%f",&n)!=1) && clear_buffer() || n<0);
while((n-0.25)>=0)
{
n=n-0.25;
a++;
}
while((n-0.10)>=0)
{
n=n-0.10;
b++;
}
while((n-0.05)>=0)
{
n=n-0.05;
c++;
}
while((n-0.01)>=0)
{
n=n-0.01;
d++;
}
printf("The minimum coins required are %f", (a+b+c+d));
}
【问题讨论】:
-
您可能想阅读以下内容:How to debug small programs
-
您可能想看看CS50 stack site(并考虑加入)。这个问题已经在那个论坛上回答过很多次了。 Here 就是一个例子。只需在该网站上搜索“4.2”,您就会找到大量答案。
-
我建议不要为此使用
float变量或浮点数学。那里有一些潜在的陷阱,尽管我不清楚这是否是你问题的根源。相反,使用整数变量和整数数学,将钱表示为整数美分而不是小数美元。
标签: c loops while-loop cs50