Просматривает пользовательский ввод, чтобы увидеть, является ли это float, всегда возвращается как true

#c #pointers #floating-point #scanf #fgets

#c #указатели #значение с плавающей запятой #scanf #fgets

Вопрос:

Я пытаюсь запросить номер пользовательского форума и просканировать его, чтобы увидеть, является ли это значением с плавающей точкой. Даже при вводе числа без десятичной дроби оно возвращается, говоря, что это значение с плавающей запятой. Функция должна возвращать 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(amp;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 Continuen");
        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", amp;number) == 1)
    {
        *pNumber = number;
        return 1;
    }
    else
    {
        return 0;
    }
}
  

Комментарии:

1. Также функция по какой-то причине запрашивает 2 ввода, и я не знаю, почему: S

2. После первой записи fgets(record, 121, stdin); просто считывается оставшееся 'n' .

Ответ №1:

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

Комментарии:

1. Спасибо! Есть идеи, почему моя функция всегда говорит, что каждое введенное число является значением с плавающей точкой?

2. @RocktheFries Любое число может быть проанализировано как значение с плавающей точкой.

3. Если вы вводите 123 , это то же самое, что ввод 123.0