更改计算器(打印最终值)

时间:2018-01-25 03:53:42

标签: c

我正在编写一个从1到100取值的代码并将其转换为更改(即16美分是1角钱,1个镍币和1美分)。我的问题是当我打印更改值时。

标点符号必须正确,所以10美分,它必须是#1; 1角钱。"而不是" 1角钱,"。

除了使用大量的if语句之外,是否有更有效的方法来考虑所有可能的宿舍,但没有镍/硬币/美分,有季度和镍,但没有镍/美分等。并打印写标点符号/更改输出组合?

谢谢!!!

// quarters
    if (quarters== 1 && dimes==0 && nickels==0 && cents == 0)
        printf("%d quarter.", quarters);
    else if (quarters>= 1 && dimes==0 && nickels==0 && cents == 0)
        printf("%d quarters.", quarters);
    // include other combinations
    else if (quarters==1)
        printf("%d quarter, ", quarters);
    else if (quarters>=1)
        printf("%d quarters, ", quarters);

1 个答案:

答案 0 :(得分:1)

关于逗号和句号:

如果它们是一角钱,镍币或分钱,你将在季度之后有一个逗号。 因此,不是测试dime不是0nickel不是0cent不是0,您可以对这些值求和测试它是否为0

关于's',您只需知道他们的1硬币或更多。

为此,您可以创建一个仅格式化一种硬币类型的功能。此函数应负责选择是否添加's',并在逗号和句点之间进行选择。每个选项都可以通过if/else测试进行,因此您可以:

#include <stdio.h>
/*
  what: name of coin
  quantity: number of coin
  rest: coins that must be displayed after
*/
void print_coin(const char *what, int quantity, int rest)
{
    /* is there something to display*/
    if (0 == quantity)
        { return; }
    /* One coin*/    
    else if (1 == quantity)
        { printf("1 %s", what) ;}
    /* several coins, add an 's' */
    else
       { printf("%d %ss", quantity, what) ;}

    /* choose between comma and period */
    if (rest > 0)
        { printf(", ");}
    else 
        { printf(".\n");}
}

/* print all coins function */
void print_coins(int quarter, int dime, int nickel)
{
    /* print each coins, one after the other */

    print_coin("quarter", quarter, dime + nickel);
    print_coin("dime", dime, nickel);
    print_coin("nickel", nickel, 0);
}

int main(void)
{
    /* examples */
    print_coins(1, 2, 3);
    print_coins(1, 0, 1);
    print_coins(1, 0, 0);
    return 0;
}