C语言 使用循环和 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-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;
}

最新更新