#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