现金更改计划使用循环和if / else

编写一个程序,允许用户输入高达$ 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-Matic\n"); printf ("Amount entered: $%.2lf\n", ((amt_ent*100)/100)); printf ("Change breakdown:\n"); { /*Change in twenties*/ twenty= (int) amt_ent/20; if (twenty >= 2) printf("%i\t$20.00s\n", twenty); if (twenty == 1) printf ("%i\t$20.00\n", twenty); else /*Change in tens*/ remainder = twenty % 20; ten = remainder/10; if (ten >=2) printf ("%i\t$10.00s\n", ten); if (ten == 1) printf ("%i\t$10.00\n", ten); else /*Change in fives*/ remainder = ten % 10; five = remainder/10; if (five >= 2) printf ("%i\t$5.00s\n", five); if (five == 1) printf ("%i\t$5.00\n", five); else /*Change in ones*/ remainder = five % 5; one = remainder/1; if (one >= 2) printf ("%i\t$1.00s\n", one); if (one == 1) printf ("%i\t$1.00\n", one); else /*Change in quarters*/ remainder = one % 1; quarter = remainder/.25; if (quarter >= 2) printf ("%i\t$.25s\n", quarter); if (quarter == 1) printf ("%i\t$.25\n", quarter); else /*Change in dimes*/ remainder = quarter % 4; dime = remainder/.10; if (dime >= 2) printf ("%i\t$.10s\n", dime); if (dime == 1) printf ("%i\t$.10\n", dime); else /*Change in nickels*/ remainder = dime % 10; nickel = remainder/.05; if (nickel >= 2) printf ("%i\t$.05s\n", nickel); if (nickel == 1) printf ("%i\t$.05\n", nickel); else /*Change in pennies*/ remainder = nickel % 20; penny = remainder/100; if (penny >= 2) printf ("%i\t$.01s\n", penny); if (penny == 1) printf ("%i\t$.01\n", penny); } while ((amt_ent = 00.00));} return 0; 

关于你的错误, printf ("Change breakdown:\n");后有额外的括号printf ("Change breakdown:\n"); 。 并且你不需要在声明之后放置闭括号。 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-Matic\n"); printf ("Amount entered: $%.2lf\n", ((amt_ent*100)/100)); printf ("Change breakdown:\n"); 

如果输入的数量无效,则将执行continue语句并跳过保持循环。 然后printf ("Enter a dollar amount up to $200.00:"); 将被执行。 所以你可以看到,除非他输入正确的金额值,否则用户将无法继续前进。

试试这个……经过测试,它的确有效。 你的问题在于计算提醒的方式。 您需要使用上一步再次分割amt_ent。 同样,所有%操作仅适用于整数。 因此,在进行计算之前,需要将100乘以100转换为整数域。

 #include #include 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-Matic\n"); printf ("Amount entered: $%.2lf\n", 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("%i\t$20.00s\n", twenty); if (twenty == 1) printf ("%i\t$20.00\n", twenty); /*Change in tens*/ amt_ent = amt_ent % 2000; ten = amt_ent/1000; if (ten >=2) printf ("%i\t$10.00s\n", ten); if (ten == 1) printf ("%i\t$10.00\n", ten); /*Change in fives*/ amt_ent = amt_ent % 1000; five = amt_ent/500; if (five >= 2) printf ("%i\t$5.00s\n", five); if (five == 1) printf ("%i\t$5.00\n", five); /*Change in ones*/ amt_ent = amt_ent % 500; one = amt_ent/100; if (one >= 2) printf ("%i\t$1.00s\n", one); if (one == 1) printf ("%i\t$1.00\n", one); /*Change in quarters*/ amt_ent = amt_ent % 100; quarter = amt_ent/25; if (quarter >= 2) printf ("%i\t$.25s\n", quarter); if (quarter == 1) printf ("%i\t$.25\n", quarter); /*Change in dimes*/ amt_ent = amt_ent % 25; dime = amt_ent/10; if (dime >= 2) printf ("%i\t$.10s\n", dime); if (dime == 1) printf ("%i\t$.10\n", dime); /*Change in nickels*/ amt_ent = amt_ent % 10; nickel = amt_ent/5; if (nickel >= 2) printf ("%i\t$.05s\n", nickel); if (nickel == 1) printf ("%i\t$.05\n", nickel); /*Change in pennies*/ amt_ent = amt_ent % 5; penny = amt_ent/1; if (penny >= 2) printf ("%i\t$.01s\n", penny); if (penny == 1) printf ("%i\t$.01\n", 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; }