编码一个程序,允许用户输入高达200.00美元的现金金额,然后计算并打印以下面额(20,10,5,1,.25,.10,.05,.01)的值。我想我已经弄清楚了如何获得面额(除法/模数)的基础知识,但这是 do/while 的结构以及 if/else 这给我带来了麻烦。我一直收到一个错误,即使我已经输入了它及其条件(见下文),我也需要一个 while 语句,但我也不知道在哪里放置范围提示(如果用户输入负数或高于 200)。任何建议/指导将不胜感激!
double amt_ent;
int twenty, ten, five, one, quarter, dime, nickel, penny, remainder;
printf ("Enter a dollar amount up to $200.00:");
scanf ("%lf", &amt_ent);
do
{ printf ("Name - Assignment 2 - Change-O-Maticn");
printf ("Amount entered: $%.2lfn", ((amt_ent*100)/100));
printf ("Change breakdown:n");
{ /*Change in twenties*/
twenty= (int) amt_ent/20;
if (twenty >= 2)
printf("%it$20.00sn", twenty);
if (twenty == 1)
printf ("%it$20.00n", twenty);
else
/*Change in tens*/
remainder = twenty % 20;
ten = remainder/10;
if (ten >=2)
printf ("%it$10.00sn", ten);
if (ten == 1)
printf ("%it$10.00n", ten);
else
/*Change in fives*/
remainder = ten % 10;
five = remainder/10;
if (five >= 2)
printf ("%it$5.00sn", five);
if (five == 1)
printf ("%it$5.00n", five);
else
/*Change in ones*/
remainder = five % 5;
one = remainder/1;
if (one >= 2)
printf ("%it$1.00sn", one);
if (one == 1)
printf ("%it$1.00n", one);
else
/*Change in quarters*/
remainder = one % 1;
quarter = remainder/.25;
if (quarter >= 2)
printf ("%it$.25sn", quarter);
if (quarter == 1)
printf ("%it$.25n", quarter);
else
/*Change in dimes*/
remainder = quarter % 4;
dime = remainder/.10;
if (dime >= 2)
printf ("%it$.10sn", dime);
if (dime == 1)
printf ("%it$.10n", dime);
else
/*Change in nickels*/
remainder = dime % 10;
nickel = remainder/.05;
if (nickel >= 2)
printf ("%it$.05sn", nickel);
if (nickel == 1)
printf ("%it$.05n", nickel);
else
/*Change in pennies*/
remainder = nickel % 20;
penny = remainder/100;
if (penny >= 2)
printf ("%it$.01sn", penny);
if (penny == 1)
printf ("%it$.01n", penny);
}
while ((amt_ent <= 200.00) && (amt_ent >= 00.00));}
return 0;
至于你的错误,printf ("Change breakdown:n");
之后有额外的大括号。而且您不需要在 while 语句之后加上右大括号。 while ((amt_ent <= 200.00) && (amt_ent >= 00.00));}
也删除它。
对于有效的金额处理问题,有一个continue
命令,该命令跳过剩余的循环并在遇到时从头开始重复。你可以使用它。
do
{
printf ("Enter a dollar amount up to $200.00:");
scanf ("%lf", &amt_ent);
if(amount_ent < 00.00 || amount_ent>200.00)
continue;
printf ("Name - Assignment 2 - Change-O-Maticn");
printf ("Amount entered: $%.2lfn", ((amt_ent*100)/100));
printf ("Change breakdown:n");
如果输入的金额无效,将执行 continue
语句并跳过 KEEP 循环。然后printf ("Enter a dollar amount up to $200.00:");
将被执行。因此,您可以看到,除非用户输入正确的金额值,否则他将无法继续。
试试这个...经过测试,它可以工作。您的问题在于计算提醒的方式。您需要使用上一步再次划分amt_ent。同样,所有 % 运算仅适用于整数。因此,在继续计算之前,您需要通过乘以 100 将双精度域转换为整数域。
#include<stdio.h>
#include<stdlib.h>
main()
{
double amt_ent1;
int amt_ent;
int twenty, ten, five, one, quarter, dime, nickel, penny;
do
{
printf ("Enter a dollar amount up to $200.00:"); //<== it is put in due to get the statement again else it execute with the same value.
scanf ("%lf", &amt_ent1);
amt_ent = (amt_ent1*100)/100;
printf ("Name - Assignment 2 - Change-O-Maticn");
printf ("Amount entered: $%.2lfn", amt_ent1);
printf ("Change breakdown:n");
if ((amt_ent > 200.00) || (amt_ent < 00.00)) continue;
amt_ent = amt_ent1 * 100;
{ /*Change in twenties*/
twenty= (int) amt_ent/2000;
if (twenty >= 2)
printf("%it$20.00sn", twenty);
if (twenty == 1)
printf ("%it$20.00n", twenty);
/*Change in tens*/
amt_ent = amt_ent % 2000;
ten = amt_ent/1000;
if (ten >=2)
printf ("%it$10.00sn", ten);
if (ten == 1)
printf ("%it$10.00n", ten);
/*Change in fives*/
amt_ent = amt_ent % 1000;
five = amt_ent/500;
if (five >= 2)
printf ("%it$5.00sn", five);
if (five == 1)
printf ("%it$5.00n", five);
/*Change in ones*/
amt_ent = amt_ent % 500;
one = amt_ent/100;
if (one >= 2)
printf ("%it$1.00sn", one);
if (one == 1)
printf ("%it$1.00n", one);
/*Change in quarters*/
amt_ent = amt_ent % 100;
quarter = amt_ent/25;
if (quarter >= 2)
printf ("%it$.25sn", quarter);
if (quarter == 1)
printf ("%it$.25n", quarter);
/*Change in dimes*/
amt_ent = amt_ent % 25;
dime = amt_ent/10;
if (dime >= 2)
printf ("%it$.10sn", dime);
if (dime == 1)
printf ("%it$.10n", dime);
/*Change in nickels*/
amt_ent = amt_ent % 10;
nickel = amt_ent/5;
if (nickel >= 2)
printf ("%it$.05sn", nickel);
if (nickel == 1)
printf ("%it$.05n", nickel);
/*Change in pennies*/
amt_ent = amt_ent % 5;
penny = amt_ent/1;
if (penny >= 2)
printf ("%it$.01sn", penny);
if (penny == 1)
printf ("%it$.01n", penny);
}
}
while ((amt_ent <= 2000) && (amt_ent >= 0)); //<== it is put inside the do loop it is wrong, it come outside the do lopp.
return 0;
}