Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,我有一个浮点变量减少了不正确的数量_C_Variables_Cs50 - Fatal编程技术网

在C语言中,我有一个浮点变量减少了不正确的数量

在C语言中,我有一个浮点变量减少了不正确的数量,c,variables,cs50,C,Variables,Cs50,我正在用C写一个程序来计算所欠的钱。您应该输入一个值,然后返回一条消息,显示如下内容:“您的更改是:x个25美分,x个10美分…” 系统通过4个“for”循环工作。每个检查变量x是否小于用户输入值(货币)。如果是这样的话,那么x增加一些硬币值(即0.25),计算特定硬币的变量增加,用户输入的值减少一些硬币值 问题是用户输入的值(存储在称为货币的浮动中)减少了不正确的数量。1-0.25应该是0.75,对吗?然而,出于某种原因,我的程序将“货币”的价值更改为0.500000 代码如下: float

我正在用C写一个程序来计算所欠的钱。您应该输入一个值,然后返回一条消息,显示如下内容:“您的更改是:x个25美分,x个10美分…”

系统通过4个“for”循环工作。每个检查变量x是否小于用户输入值(货币)。如果是这样的话,那么x增加一些硬币值(即0.25),计算特定硬币的变量增加,用户输入的值减少一些硬币值

问题是用户输入的值(存储在称为货币的浮动中)减少了不正确的数量。1-0.25应该是0.75,对吗?然而,出于某种原因,我的程序将“货币”的价值更改为0.500000

代码如下:

float money = 0.00;
int q = 0;
int d = 0;
int n = 0;
int p = 0;
float x = 0.00;

printf("Enter amount: ");
money = GetFloat(); // This function is part of a library called cs50.h

for (x = 0.00; x < money; (x = x + 0.25)) {
    q++;
    money = (money - 0.25); // This, and everything else like this, is the problem
}

for (x = 0; x < money; (x = x + 0.10)) {
    d++;
    money = (money - 0.10);
}

for (x = 0; x < money; (x = x + 0.05)) {
    n++;
    money = (money - 0.05);
}

for (x = 0; x < money; (x = x + 0.01)) {
    p++;
    money = (money - 0.01);
}

printf("Your change is: %i quarters, %i dimes, %i nickles, and %i pennies.\n", q, d, n, p);
float money=0.00;
int q=0;
int d=0;
int n=0;
int p=0;
浮动x=0.00;
printf(“输入金额:”);
money=GetFloat();//此函数是名为cs50.h的库的一部分
对于(x=0.00;x
我没有真正读过你的故事,但0.500正是你的for循环产生的

for (x = 0.00; x < money; (x = x + 0.25)) {
    q++;
    money = (money - 0.25); // This, and everything else like this, is the     problem
}
for(x=0.00;x
假设货币是1: 第1次迭代后:x变为0.25,money变为0.75 然后进行第二次迭代:x变成0.5,money变成0.5 第二次迭代后,循环结束。因此,货币=0.5f


所有的循环都有完全相同的问题。记住,只有当条件x<金钱不成立时,循环才会停止

我没有真正读过你的故事,但0.500正是你的for循环产生的结果

for (x = 0.00; x < money; (x = x + 0.25)) {
    q++;
    money = (money - 0.25); // This, and everything else like this, is the     problem
}
for(x=0.00;x
假设货币是1: 第1次迭代后:x变为0.25,money变为0.75 然后进行第二次迭代:x变成0.5,money变成0.5 第二次迭代后,循环结束。因此,货币=0.5f


所有的循环都有完全相同的问题。记住,只有当条件x<金钱不成立时,循环才会停止

我没有真正读过你的故事,但0.500正是你的for循环产生的结果

for (x = 0.00; x < money; (x = x + 0.25)) {
    q++;
    money = (money - 0.25); // This, and everything else like this, is the     problem
}
for(x=0.00;x
假设货币是1: 第1次迭代后:x变为0.25,money变为0.75 然后进行第二次迭代:x变成0.5,money变成0.5 第二次迭代后,循环结束。因此,货币=0.5f


所有的循环都有完全相同的问题。记住,只有当条件x<金钱不成立时,循环才会停止

我没有真正读过你的故事,但0.500正是你的for循环产生的结果

for (x = 0.00; x < money; (x = x + 0.25)) {
    q++;
    money = (money - 0.25); // This, and everything else like this, is the     problem
}
for(x=0.00;x
假设货币是1: 第1次迭代后:x变为0.25,money变为0.75 然后进行第二次迭代:x变成0.5,money变成0.5 第二次迭代后,循环结束。因此,货币=0.5f


所有的循环都有完全相同的问题。记住,只有当条件x<金钱不成立时,循环才会停止

你确定你的循环是正确的吗?我认为你可能没有得到你所期望的,因为循环的逻辑是不正确的。例如,我认为如果money=1.00开始,第一个循环将有以下结果

x     q     money   x<money
0.00  1     0.75    1   
0.25  2     0.50    1
0.50  3     0.25    0 (exit loop)

xq money x你确定你的循环是正确的吗?我认为你可能没有得到你所期望的,因为循环的逻辑是不正确的。例如,我认为如果money=1.00开始,第一个循环将有以下结果

x     q     money   x<money
0.00  1     0.75    1   
0.25  2     0.50    1
0.50  3     0.25    0 (exit loop)

xq money x你确定你的循环是正确的吗?我认为你可能没有得到你所期望的,因为循环的逻辑是不正确的。例如,我认为如果money=1.00开始,第一个循环将有以下结果

x     q     money   x<money
0.00  1     0.75    1   
0.25  2     0.50    1
0.50  3     0.25    0 (exit loop)

xq money x你确定你的循环是正确的吗?我认为你可能没有得到你所期望的,因为循环的逻辑是不正确的。例如,我认为如果money=1.00开始,第一个循环将有以下结果

x     q     money   x<money
0.00  1     0.75    1   
0.25  2     0.50    1
0.50  3     0.25    0 (exit loop)

xq money x你用调试器检查过你的代码了吗?如果你的回答不是“是”,那么请删除这个问题,这样做,当你有真正的问题时再回来。@JimLewis虽然我完全同意你的看法,但OP在他期望
0.75
时得到的值是
0.500000
这一事实表明存在逻辑错误,这不是浮点精度的问题。你已经用调试器检查过你的代码了吗?如果你的回答不是“是”,那么请删除这个问题,这样做,当你有真正的问题时再回来。@JimLewis虽然我完全同意你的看法,但OP在他期望
0.75
时得到的值是
0.500000
这一事实表明存在逻辑错误,这不是浮点精度的问题。你已经用调试器检查过你的代码了吗?如果你的回答不是“是”,那么请删除这个问题,这样做,当你有真正的问题时再回来。@JimLewis虽然我完全同意你的看法,但OP在他期望
0.75
时得到的值是
0.500000