Программа смены денежных средств с использованием циклов и if / else

Кодирование программы, которая позволяет пользователю вводить денежную сумму до 200 долларов США, а затем вычисляет и печатает ее значение в следующих номиналах (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 будет выполняться, и цикл while будет пропущен. Затем printf ("Enter a dollar amount up to $200.00:"); будет выполнен. Таким образом, вы можете видеть, пользователь не сможет идти дальше, если он не введет правильное значение суммы.

Попробуйте это … Протестировано и работает. Проблема была в том, как рассчитывается напоминание. Вам нужно еще раз разделить amt_ent с предыдущим шагом. Опять же все% операций работают только с целыми числами. Таким образом, вам нужно преобразовать свой двойной в целочисленный домен, умножив его на 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; }