【问题标题】:cash register with infinite loop and change counter c具有无限循环的收银机和零钱计数器 c
【发布时间】:2015-02-20 21:57:08
【问题描述】:

我已尽我所能完成程序中的所有事情,但我无法让它告诉我对于所有硬币值它保持在 0 的适当零钱数量。

当输入的项目数量为0时,我将如何打破无限循环,

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

int main(void)
{
    //variables used
    int penny = 0;
    int nickel = 0;
    int dime = 0;
    int quarter = 0;
    int items = 0.0;
    double paid= 0.0;
    double total = 0.0;
    double price =0.0;
    double change = 0.0;
    int counter =0;

    for (;;)
    {
        printf("Please enter the number of grocery items:");
        scanf("%d", &items);

        for (counter = 1; counter <= items; counter++)
        {
            printf("Please enter the price for item #%d:", counter);
            scanf("%f", &price);

            total += price;

        }

        printf("Please enter amount payed:");
        scanf("%f", &paid);

        change = paid - total;

        while (change > 0)
        {
            if (change >= .25)
            {
                change = change - .25;
                quarter = quarter + 1;
            }
            else if (change >= .1)
            {
                change = change - .1;
                dime = dime + 1;
            }
            else if (change >= .05)
            {
                change = change - .05;
                nickel = nickel + 1;
            }
            else if (change >= .01)
            {
                change = change - .01;
                penny = penny + 1;
            }
        }

        printf("this is your change %d quarters, %d dimes, %d nickels, %d pennies.\n", quarter, dime, nickel, penny);



    }
}

【问题讨论】:

    标签: c loops break


    【解决方案1】:

    使用浮点数而不是双精度数。

    Tp 在检查 items == 0 后跳出循环。

    for (;;)  {
        printf("Please enter the number of grocery items:");
        scanf("%d", &items);
    
        if (items == 0) {
            break;
        }
    
        for (counter = 1; counter <= items; counter++) {
            printf("Please enter the price for item #%d:", counter);
            scanf("%f", &price);
            total += price;
        }
        etc...
    }   
    

    【讨论】:

      【解决方案2】:

      您的scanf() 说明符错误,请使用double 中的"%lf" 或者更好,将所有 double 变量更改为 float

      【讨论】:

      • 这并没有改变什么
      • @jparks54 我测试了这个程序,它是这样修复的。你能提供一个样本输入吗?当然,你知道你的程序总是会输出quarters中的变化,不是吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多