c - While-循环中的错误使计数超出条件

标签 c while-loop counter nested-loops

对于学校,我要编写一个 C 程序,该程序需要一定数量的现金并返回达到该金额所需的最少数量的硬币。我不知道我做错了什么。我一直在调整和尝试各种不同的事情,但我似乎无法完全调试该程序。

该程序对某些输入给出了正确答案,但夸大了许多输入所需的硬币数量。

这是我到目前为止所拥有的。

#include <stdio.h>

int main()
{
    float cash;
    int n;
    int counter=0;
    int quarters=0;
    int dimes=0;
    int nickels=0;
    int pennies=0;

    for (;;)
    {
        printf("Enter change amount: ");
        scanf("%f",&cash);

        if (cash > 0)
        {
            break;
        }
    }

    n = cash * 100; 
    counter = 0;

    while (n > 0)
    {
        while (n >= 25)
        {
            counter ++;
            n = n - 25;
            quarters ++;
            printf("%i\n",n);
        }

        while (n >= 10 && n < 25)
        {
            counter ++;
            n = n - 10;
            dimes ++;
            printf("%i\n",n);
        }

        while (n >= 5 && n < 10)
        {
            counter ++;
            n = n - 1;
            nickels++;
            printf("%i\n",n);
        }

        while (n > 0 && n < 5)
        {
            counter ++;
            n = n - 1;
            pennies ++;
            printf("%i\n",n);
        }
    }
    printf("%d\n",counter + n);
    printf("%i quarters, %i dimes, %i nickels, %i pennies\n", 
                quarters, dimes, nickels, pennies); 

    return 0;
}

最佳答案

我有点惊讶他们希望你使用break来退出循环,因为你通常希望循环“自然”地结束(并且你通常为switch语句保存break)。像这样的东西应该可以工作,使用整数除法和模运算符(编辑注释:我使用两个整数而不是单个 float ,因为后者不准确。如果更有知识的人想要展示如何使用 float 来做到这一点,那么有趣。):

#include <stdio.h>

int main() {
    int dollar, cent;

    int q = 0;
    int d = 0;
    int n = 0;
    int p = 0;

    int re;

    printf("Enter amount: ");
    scanf(" %d.%d", &dollar, &cent);

    q = dollar * 4;        
    re = cent;

    q = q + (re / 25);
    re = re % 25;

    d = re / 10;
    re = re % 10;

    n = re / 5;
    re = re % 5;

    p = re;

    printf("q %d d %d n %d p %d\n", q, d, n, p);

    return 0;
}

例如,如果您获得了秒数并希望从中找到分钟:秒,则此方法也适用。如果给你 65 秒,则分钟部分为 65/60(即 1),而秒部分就是除以 60 后的余数,即 65 % 60(即 5)。

关于c - While-循环中的错误使计数超出条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402515/

相关文章:

c - C 中的虚拟继承示例,利用未定义的行为?

c - 递归输出C

c - 按顺序打印的动态数组

PHP-EWS while 循环错误无法重新声明类 EwsSendEmail

r - 如何生成一个矩阵来存储集合的所有非空子集

Python 排序计数器

c++ - 编译 32 位时出现 __int128 错误

php - MySQL 回显同时

javascript - 在一定次数的点击后执行操作,例如显示图片

javascript - 在一段时间内增加值 JS