float get_positive_float(char const *prompt)
{
float result;
while (prompt && printf(prompt), scanf(" %f", &result) != 1 || result < 0.f) {
fputs("Please only enter positive values!\n\n", stderr);
for (int ch; (ch = getchar()) != '\n' && ch != EOF;); // clear the rest of the line
}
return result;
}
Версия с использованием штук из <cs50.h>
может выглядеть так:
float get_positive_float(string prompt)
{
float result;
while ((result = get_float(prompt)), result < 0.f) {
fputs("Please only enter positive values!\n\n", stderr);
}
return result;
}
Проблема, однако, в том, что числа с плавающей запятой не подходят для денежных сумм.Используйте целочисленный тип и рассчитайте в центах.Для вывода разделите на 100.