printf не работает и другие проблемы
Я наконец-то получил свою программу изменений, чтобы распечатать некоторые числа вместо того, чтобы выдавать исключение с плавающей точкой Тем не менее, сейчас он немного выключен. Вместо того, чтобы давать 2 четверти, 1 цент, 1 никель и 2 пенни, программа выбирает только один пенни, и я не могу понять, почему из какого-либо осмотра условий или структуры кода. Я добавил несколько проверок в каждое утверждение if, но даже не то, что оно распечатывается, сейчас я невероятно растерялся..
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int changeF(float change, float div)
{
int c = change/div;
return c;
}
int main(void)
{
printf("Enter the bill amount:");
float bill = GetFloat();
printf("Enter the payment amount:");
float payment = GetFloat();
float q = .25; float di = .1; float n = .05; float p = .01;
float change = payment - bill;
do
{
if (bill >= 0.0 && payment >= 0.0 && change >= 0.0)
{
if (change >= q)
{
int quarters = changeF(change, q);
printf("%d quarters\n", quarters);
change = change - (.25*quarters);
}
if (change >= di)
{
int dimes = changeF(change, di);
printf("%d dimes\n", dimes);
change = change - (.1*dimes);
}
if (change >= n)
{
int nickels = changeF(change, n);
printf("%d nickels\n", nickels);
change = change - (.05*nickels);
printf("%f change", change);
}
if (change >= p)
{
int pennies = changeF(change, p);
printf("%d pennies\n", pennies);
change = change - (.01*pennies);
printf("%f", change);
}
}
}
while (change > 0.0);
}
2 ответа
Попробуйте еще раз, добавив новую строку в конце строки:
printf("Enter the bill amount:\n");
Причина: stdout
строка буферизована, и вам нужно дать ей новую строку, чтобы очистить вывод.
Или явно очистить его fflush(stdout);
,
Не думайте с точки зрения долларов, но с точки зрения центов и используйте целочисленную арифметику для своих расчетов. Вы все еще можете попросить пользователя ввести сумму в долларах, округлив:
int bill = GetFloat() * 100 + 0.5;
Константы для значений тогда, конечно, также будут целыми числами, а именно 25, 10, 5 и 1.
Тогда ваш changeF
Функция это просто целочисленное деление. (Вы можете отказаться от деления на единицу за копейки - просто сделайте остальную часть разменных копеек.)
Вам даже не нужно do
... while
петля. Достаточно сделать расчет только один раз. Ищите кварталы, десять центов и никелей, а остальное - копейки. Готово. Нет необходимости повторять.