Obtaining user input can be done in many surprisingly different ways. This code is somewhere in the middle: safer than scanf("%lf", &n) , but not bulletproof. It is meant to be a simple but relatively safe demonstration. Note also that there would be slight differences for using float instead of double .

The function mygetd reads user input from the stdin into a string using fgets . Then it attempts to convert this string to a double using sscanf . If both functions succeed, a 1 is returned; if either fails, a 0 is returned.

Leading whitespace, and other trailing characters are some things not handled. Those issues are handled in Read a Floating-Point Value from the User, Part 2 and Read a Floating-Point Value from the User, Part 3.

#include <stdio.h>

int mygetd(double *result)
{
   char buff [ 32 ]; /* modify array size to suit your needs */
   return fgets(buff, sizeof buff, stdin) && sscanf(buff, "%lf", result) == 1;
}

int main(void)
{
   double value;
   do {
      fputs("Enter a floating-point number: ", stdout);
      fflush(stdout);
   } while ( !mygetd(&value) );
   printf("value = %g\n", value);
   return 0;
}

/* my output
Enter a floating-point number: one
Enter a floating-point number: 
Enter a floating-point number: f12.3
Enter a floating-point number: -45.67
value = -45.67

Enter a floating-point number: -12.3f
value = -12.3

Enter a floating-point number:    125 help
value = 125
*/
The article starter has earned a lot of community kudos, and such articles offer a bounty for quality replies.