我正在编写一个从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);
答案 0 :(得分:1)
关于逗号和句号:
如果它们是一角钱,镍币或分钱,你将在季度之后有一个逗号。
因此,不是测试dime
不是0
,nickel
不是0
,cent
不是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;
}