#include #include int getfloat(double *np); char getch(void); void ungetch(char input); int main(void) { double num; getfloat(&num); printf("%.8g\n", num); return 0; } int getfloat(double *np) { int input, sign, divider; /* skip space */ while (isspace(input = getch())) ; if (!isdigit(input) && input != EOF && input != '+' && input != '-' && input != '.') { ungetch(input); return 0; } sign = (input == '-') ? -1 : 1; if (input == '+' || input == '-') while (isspace(input = getch())) ; for (*np = 0; isdigit(input); input = getch()) *np = *np * 10 + input - '0'; if (input == '.') for (divider = 1; isdigit(input = getch()); divider *= 10) *np = *np * 10 + input - '0'; *np = *np * sign / divider; if (input != EOF) ungetch(input); /* return last input, EOF */ return input; } static char buff = -1; char getch(void) { char temp; if (buff == -1) return getchar(); temp = buff; buff = -1; return temp; } void ungetch(char input) { if (buff == -1) buff = input; else printf("Err: buffer is full\n"); }