CS50 PSET1 cash.c: я не могу заставить его напечатать значение, которое я хочу. Просто повторяю ввод снова и снова
Начинающий здесь, и я чувствую, что я так близок к решению этой проблемы, но по какой-то причине всякий раз, когда я запускаю свой код, он просто просит меня снова и снова вводить, сколько изменений я должен, и не печатает сумму монеты
Эта проблема:
Запишите в файл с именем cash.c в ~/workspace/pset1/cash/ программу, которая сначала запрашивает у пользователя сумму внесенных изменений, а затем выплевывает минимальное количество монет, с помощью которых можно внести указанное изменение.
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main(void)
{
float x;
int coin_amount = 0;
do
{
x = get_float("how much change is owed: $");
}
while (x < 0);
while (x >= .25)
{
coin_amount += 1;
x = x - .25;
}
while (x >= .10 && x < .25)
{
coin_amount += 1;
x = x - .10;
}
while (x >= .05 && x < .10)
{
coin_amount += 1;
x = x - .05;
}
while (x >= .01 && x < .05)
{
coin_amount += 1;
x = x - .01;
}
while (x < .01)
{
coin_amount = coin_amount;
}
printf("I have %i coins to give you in change\n", coin_amount);
}
Есть идеи в том, что я делаю не так? Спасибо:)
1 ответ
Основная проблема с вашим решением заключается в том, что финал while()
цикл - после ввода - не может быть завершен. Однако есть несколько других небольших проблем:
- Вы должны использовать
return 0;
чтобы обеспечить возвращаемое значение дляint main(void)
while (x >= .10 && x < .25)
и друзья излишни: вы можете просто использоватьwhile (x >= .10)
(поскольку второе условие уже выполнено в предыдущемwhile()
петля- Ты можешь использовать
x -= .25
вместоx = x - .25
(не важно и вопрос предпочтений)
Учитывая эти моменты, вы можете попробовать следующее...
#include <stdio.h>
int main(void) {
float x = 0.0;
int coin_amount = 0;
printf("Enter the currency amount: ");
scanf("%f", &x);
printf("You entered: %.4f\n", x);
while (x >= .25) {
coin_amount += 1;
x -= .25;
}
while (x >= .10) {
coin_amount += 1;
x -= .10;
}
while (x >= .05) {
coin_amount += 1;
x -= .05;
}
// Use .00999 instead of .01 due to quirks with floating point math
while (x >= .00999) {
coin_amount += 1;
x -= .01;
}
if (x > 0) {
printf("Ignoring residual value - %.4f ...\n", x);
}
printf("I have %i coins to give you in change\n", coin_amount);
return 0;
}
Вы не указали, что ваш get_float()
функция есть, поэтому я использовал scanf()
вместо.
Как отметил Юннош в своем ответном комментарии, возможно, стоит рассмотреть решение, которое также не использует математику с плавающей запятой.