无法弄清楚如何在 while 循环 C 中正确地递增变量

Cannot figure out how to properly increment a variable inside of a while loop, C

提问人:Nermin 提问时间:9/26/2020 最后编辑:Nermin 更新时间:9/26/2020 访问量:325

问:

编辑:在IDE中重写代码后,今天第8次,我犯了一个新手错误,给我的输入一个错误的数据类型,这已经修复,但我的输出仍然不正确。

关于我的目标的详细信息:在进行更改时,您可能希望尽量减少为每个客户分配的硬币数量。 好吧,假设收银员欠客户一些零钱,收银员的抽屉里有四分之一(25美分)、一角硬币(10美分)、镍币(5美分)和便士(1美分)。要解决的问题是决定将哪些硬币以及每种硬币的数量交给客户。

预期结果: 欠款变更: 0.41
4

实际结果: 欠款款:

0.41
3

#include <math.h>
#include <cs50.h>
#include <stdio.h>

int main (void)

{
    float dollars;
    int changeowed = 0;

    do
    {
      dollars = get_float ("Change owed: ");
    }
    while (dollars < 0);

    float cents = round(dollars * 100);

    while (cents >= 25)
    {
        cents = cents - 25;
        changeowed++;
    }

    while (cents > 10)
    {
        cents = cents - 10;
        changeowed++;
    }
    while (cents > 5)
    {
        cents = cents - 5;
        changeowed++;
    }

        while (cents > 1)
        {
            cents = cents - 1;
            changeowed++;
        }

        printf("%i \n", changeowed);
}
C while 循环 CS50

评论

2赞 cigien 9/26/2020
您期望如何存储?int dollar;0.41
1赞 Jarod42 9/26/2020
int dollars = get_float ("Change owed: ");.类型不匹配...
1赞 stark 9/26/2020
解决这个问题的最简单方法是在调试器中运行并查看美元和美分等变量。如果您不愿意学习调试器,您可以通过在程序中的各个点添加 print 语句来更慢地执行相同的操作。
0赞 Nermin 9/26/2020
汤姆,通过“将值保持在整数(美分数)中”,您的意思是将我的“coins”变量声明为 int 数据类型,而不是现在的浮点数?我已经这样做了: int cents = round(dollars * 100);而我 0.41 的输出仍然是 3 个硬币。我错过了什么吗?
0赞 klutt 9/26/2020
@TomKarzes 虽然你所说的对于实际应用程序来说是正确的,但对于 cs50 课程来说并不重要

答:

1赞 Tom Karzes 9/26/2020 #1

问题来了:有 4 个循环,一个用于四分之一,一个用于一角钱,一个用于镍币,一个用于便士。第一个循环条件是正确的:

while (cents >= 25)

其他三个是不正确的:

while (cents > 10)
while (cents > 5)
while (cents > 1)

这些都需要更改以代替 。>=>

评论

0赞 Nermin 9/26/2020
汤姆,非常感谢你抽出时间接受采访。你的回答帮助我完成了。我已经为你投了赞成票,但由于我的代表不到 15 个,所以它可能不可见。干杯!
0赞 0___________ 9/26/2020 #2

对于任何名义,您都可以做得很简单。使用整数类型。

int nominals[] = {100, 25, 10, 5, 1, 0};

void getNominals(double money, int *result)
{
    unsigned ncents = money * 100.0;
    int *nm = nominals;
    while(*nm && ncents)
    {
        *result++ = ncents / *nm;
        ncents %= *nm++;
    }
}

int main(void)
{
    int result[sizeof(nominals) / sizeof(nominals[0])] = {0};

    getNominals(4.36, result);

    for(size_t index = 0; nominals[index]; index++)
    {
        printf("%d = %d\n", nominals[index], result[index]);
    }
}

https://godbolt.org/z/WdYxxr