【发布时间】:2018-11-25 18:52:21
【问题描述】:
我希望这个函数返回我的变化。而且我有限制,我不能插入所有类型的硬币。例如,如果我有givemeChange(0.50) 我想插入钱,直到它们足以支付产品。我找不到解决方案。我在终端中插入 2 个数字,然后函数总是继续 return 0.69
这是我的代码:
感谢您的宝贵时间
float givemeChange(float price){
printf("Only these coins are allowed:\n" );
printf("0.05€ 0.10€ 0.20€ 0.50€ 1€ 2€\n\n");
float str = 0 ;
float count = 0 ;
while(count <= price){
printf("Insert coins\n" );
scanf("%f\n",&str );
if(str == 0.05){
count = count + 0.05;
}
if(str == 0.10){
count = count + 0.10;
}
if(str == 0.20){
count = count + 0.20;
}
if(str == 0.50){
count = count + 0.50;
}
if(str == 1){
count = count + 1;
}
if(str == 2){
count = count + 2;
}
else{
return 0.69;
}
}
return (price-count);
}
【问题讨论】:
-
很多地方都需要
else if。现在,如果str != 2,你每次返回 0.69。 -
打印您扫描的内容,或使用您选择的其他调试方法,看看会发生什么。
-
你可能会像往常一样遇到麻烦,你不能精确地存储任何数字,除了 2 的幂 - 你不能将
0.5完全存储在内存中,因为在二进制系统中,它是一个永无止境的分数,比如1/3十进制。因此,您可能很难进行比较==。就像1.0 / 3.0 == 0.3333永远不会为真,无论您在小数点处添加多少3。 -
是的,我理解错误。现在我正在努力寻找解决方案。我为每个 if 加上 else。
-
你的导师只要坚持“不要对这个问题使用浮点数”就可以轻松避免很多麻烦:(
标签: c if-statement while-loop floating-point scanf