【问题标题】:Cannot figure out how to properly increment a variable inside of a while loop, C无法弄清楚如何在while循环中正确增加变量,C
【发布时间】:2021-01-12 00:36:45
【问题描述】:

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

关于我的目标的详细信息:在进行找零时,您可能希望尽量减少为每位客户分配的硬币数量。 好吧,假设收银员欠客户一些零钱,收银员的抽屉里有 25 美分 (25 美分)、1 美分 (10 美分)、5 美分 (5 美分) 和 1 美分 (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);
}

【问题讨论】:

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

标签: c while-loop cs50


【解决方案1】:

问题是:有 4 个循环,一个用于 25 美分硬币,一个用于一角硬币,一个用于五分硬币,一个用于硬币。第一个循环条件正确:

while (cents >= 25)

其他三个不正确:

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

这些都需要更改为使用&gt;= 代替&gt;

【讨论】:

  • 汤姆,非常感谢您抽出宝贵时间。你的回答帮助我完成了。我已经投票给你了,但由于我的代表少于 15 个,所以它可能不可见。干杯!
【解决方案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

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 2021-01-06
    • 1970-01-01
    • 2014-02-16
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多