这个程序必须计算最小数量的硬币,但它有某种bug,因为结果很奇怪。这可能是明显的错误,但我找不到它。
int main(int argc,char* argv[]){
float x;
printf("How much cash in float number:");
scanf("%f", &x);
int quaters;
while(x>=0.25){
x-=0.25;
quaters++;
}
printf("%f\n",x);
int fives;
while (x>=0.05){
x-=0.05;
fives++;
}
printf("%f\n",x);
int one;
while (x>=0.01){
x-=0.01;
one++;
}
printf("%f\n",x);
printf("quaters %d\t fives %d\t ones %d\n", quaters, fives, one);
return 0;
}
输出就是这个
How much cash in float number:0.41
0.160000
0.010000
0.010000
quaters 1 fives 3 ones 32764
出了什么问题?
答案 0 :(得分:0)
在使用之前,您需要将quaters
,fives
和one
初始化为0:
int quaters=0;
....
int fives=0;
....
int one=0;
....
关于最后的0.01结果,谷歌“比较浮动变量C ++”。即使在这里你也会找到很多相关的帖子。
要立即解决,因为您在小数点后最多使用2位数,请从
更改float
比较
x>=0.25
到
x>0.249
所有其他人都相应地:
x>0.049
x>0.009
答案 1 :(得分:0)
int quaters;
int fives;
int one;
quaters
fives
和one
未初始化会导致未定义的行为
答案 2 :(得分:0)
quarter
,five
和one
未正式注册。将它们初始化为0
。
同样在比较中 -
while(x>=0.25){ // x is float and 0.25 is double
x-=0.25;
你不应该像这样比较浮点数。
答案 3 :(得分:0)
尝试使用较小的值进行比较以隐藏错误。我在这里使用EPS
作为小值。
a>b
- > a>b+EPS
a>=b
- > a+EPS>b
a==b
- &gt; fabs(a-b)<EPS
(fabs
位于math.h
)另外,不要忘记初始化变量!
#include <stdio.h>
#define EPS (1e-9)
int main(int argc,char* argv[]){
float x;
printf("How much cash in float number:");
scanf("%f", &x);
int quaters=0;
while(x+EPS>0.25){
x-=0.25;
quaters++;
}
printf("%f\n",x);
int fives=0;
while (x+EPS>0.05){
x-=0.05;
fives++;
}
printf("%f\n",x);
int one=0;
while (x+EPS>0.01){
x-=0.01;
one++;
}
printf("%f\n",x);
printf("quaters %d\t fives %d\t ones %d\n", quaters, fives, one);
return 0;
}