Перекомпоновка пользователя при вводе отрицательного значения с плавающей запятой - PullRequest
0 голосов
/ 25 февраля 2019

так что я полный новичок в C и борюсь с языком.Мне нужно написать программу, которая будет предлагать пользователю ввести число, если они вводят отрицательное число, пока не получат положительное.Пока у меня есть ниже, сообщения об ошибках не отображаются, но когда я набираю отрицательное значение с плавающей запятой, он не выдает мне снова, а просто отображает число.Есть идеи?

#include <cs50.h>
#include <stdio.h>
#include <math.h>

float get_positive_float(string prompt);

int main(void)
{
    float f = get_float("Cash: ");
    printf("%f\n", f);
}

float get_positive_float(string prompt)
{
    float n;
    do {
        n = get_float("%s", prompt);
    } while (n < 0);
    return n;
}

1 Ответ

0 голосов
/ 25 февраля 2019
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.

...