C 此解决方案不接受任何浮动
目前,在cs50x的一个习题集“现金”中,这是一个简单的“询问欠了多少零钱,然后计算需要多少硬币”任务,所以这里不是询问解决方案,但我不明白为什么这不起作用 虽然它确实要求输入,但当我输入一个浮点数(如5.96)时,它只是挂起。没有回报,没有任何错误。我得把它关上。另一件事是while循环在设置为0时执行相同的操作,这是为了获得硬币的确切数量而使用的方法 我知道这段代码有多低效,还有更简单的方法。我只想了解其中的原因,以避免今后犯同样的错误。谢谢C 此解决方案不接受任何浮动,c,cs50,C,Cs50,目前,在cs50x的一个习题集“现金”中,这是一个简单的“询问欠了多少零钱,然后计算需要多少硬币”任务,所以这里不是询问解决方案,但我不明白为什么这不起作用 虽然它确实要求输入,但当我输入一个浮点数(如5.96)时,它只是挂起。没有回报,没有任何错误。我得把它关上。另一件事是while循环在设置为0时执行相同的操作,这是为了获得硬币的确切数量而使用的方法 我知道这段代码有多低效,还有更简单的方法。我只想了解其中的原因,以避免今后犯同样的错误。谢谢 #include <stdio.h>
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main(void)
{
// changes and other containers
int p = 1;
int n = 5;
int d = 10;
int q = 25;
int x = 0;
float c;
// get how much change is owed in float
do
{
c = get_float("Change owed: ");
}
while (c < 0);
// int conversion to avoid imprecision
int a = round(c * 100);
// 1 because 0 spits out an unknown error
while (a >= 1)
{
// if the converted amount is bigger than a quarter
if (a >= q)
{
// x = number of coins, a = amount left
x = a / q;
a = a % q;
}
else if (a >= d)
{
x = x + a / d;
a = a - a % d;
}
else if (a >= n)
{
x = x + a / n;
a = a - a % n;
}
else
{
x = x + a / p;
a = a - a % p;
}
}
printf("%i\n", x);
printf("%i\n", a);
}
#包括
#包括
#包括
内部主(空)
{
//更改和其他容器
int p=1;
int n=5;
int d=10;
int q=25;
int x=0;
浮点数c;
//获取浮动中所欠的零钱
做
{
c=获得浮动(“欠下的更改:”);
}
c<0;
//int转换以避免不精确
int a=圆形(c*100);
//1,因为0吐出未知错误
while(a>=1)
{
//如果换算金额大于四分之一
如果(a>=q)
{
//x=硬币数量,a=剩余金额
x=a/q;
a=a%q;
}
如果(a>=d),则为else
{
x=x+a/d;
a=a-a%d;
}
如果(a>=n),则为else
{
x=x+a/n;
a=a-a%n;
}
其他的
{
x=x+a/p;
a=a-a%p;
}
}
printf(“%i\n”,x);
printf(“%i\n”,a);
}
多亏了WhozCraig,我才发现我的逻辑出了问题
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main(void)
{
// changes and other containers
int p = 1;
int n = 5;
int d = 10;
int q = 25;
int x = 0;
float c;
// get how much change is owed in float
do
{
c = get_float("Change owed: ");
}
while (c < 0);
// int conversion to avoid imprecision
int a = round(c * 100);
// 1 because 0 spits out an unknown error
while (a >= 1)
{
// if the converted amount is bigger than a quarter
if (a >= q)
{
// x = number of coins, a = amount left
x = a / q;
a = a % q;
}
else if (a >= d)
{
x = x + a / d;
a = a % d;
}
else if (a >= n)
{
x = x + a / n;
a = a % n;
}
else
{
x = x + a / p;
a = a % p;
}
}
printf("%i\n", x);
printf("%i\n", a);
}
#包括
#包括
#包括
内部主(空)
{
//更改和其他容器
int p=1;
int n=5;
int d=10;
int q=25;
int x=0;
浮点数c;
//获取浮动中所欠的零钱
做
{
c=获得浮动(“欠下的更改:”);
}
c<0;
//int转换以避免不精确
int a=圆形(c*100);
//1,因为0吐出未知错误
while(a>=1)
{
//如果换算金额大于四分之一
如果(a>=q)
{
//x=硬币数量,a=剩余金额
x=a/q;
a=a%q;
}
如果(a>=d),则为else
{
x=x+a/d;
a=a%d;
}
如果(a>=n),则为else
{
x=x+a/n;
a=a%n;
}
其他的
{
x=x+a/p;
a=a%p;
}
}
printf(“%i\n”,x);
printf(“%i\n”,a);
}
您需要对此进行调试。你会发现你的逻辑,比如a=a-a%d密码>错了。你是个明星。非常感谢。请为这个问题创建一个答案,以便将其从未回答的问题列表中删除。好的,我知道了。关于:int a=round(c*100)
函数:round()
需要一个double
参数并返回一个double
值。。尝试将该双精度值填充到int
中容易出错。建议使用:100.0
和floor()代码>是一个合理的转换。考虑<代码>长A= Ln圆(C* 100);<代码>以更好地处理拐角情况c*100
可能不精确,因此请开始c*100.0
更可能是精确的。我不知道lround和double舍入。非常感谢。谢谢