Глядя на пользовательский ввод, чтобы увидеть, является ли это float, всегда возвращаясь как истина - PullRequest
2 голосов
/ 14 марта 2019

Я пытаюсь запросить у пользователя номер форума и отсканировать его, чтобы определить, является ли он поплавком.Даже при вводе числа без десятичной дроби он возвращается, говоря, что это число с плавающей точкой.Функция должна возвращать 1, если вход является плавающей точкой, и 0, если нет.У меня есть чувство, что это проблема с моей функциональной логикой.Любая помощь будет оценена.Спасибо!

#include <stdio.h>   //including for the use of printf
#pragma warning(disable: 4996)      // turn off warning about sscanf()

/* == FUNCTION PROTOTYPES == */
double getDouble(double *pNumber);
double *pNumber = NULL;

int main(void)
{   
    double returnedValue = 0;
    double userInput = 0;
    int runOnce = 0;

    printf("Please Enter a float:");
    userInput = getDouble(&returnedValue);

    while (runOnce == 0)
    {
        if (userInput == 1)
        {
            printf("Your number is a valid float!\n");
            printf("%lf", returnedValue);
        }

        else
        {
            printf("Your number is not a float!\n");
        }

        printf("Press ENTER key to Continue\n");
        getchar();
    }
}



#pragma warning(disable: 4996)
double getDouble(double *pNumber)
{
    char record[121] = { 0 }; /* record stores the string from the user*/
    double number = 0;

    /* fgets() - a function that can be called in order to read user input from the keyboard */
    fgets(record, 121, stdin);

    if (scanf("%lf", &number) == 1)
    {
        *pNumber = number;
        return 1;
    }
    else
    {
        return 0;
    }
}

1 Ответ

1 голос
/ 14 марта 2019

Вы звоните как fgets() , так и scanf().Используйте один или другой, но не оба.Если вы собираетесь использовать fgets(), тогда используйте sscanf() для анализа результата.

...