diff options
author | sinanmohd <pcmsinan@gmail.com> | 2022-06-16 18:11:56 +0530 |
---|---|---|
committer | sinanmohd <pcmsinan@gmail.com> | 2022-06-16 18:11:56 +0530 |
commit | ba3e350d9794cbd39c57a2ad74ea346e8a197401 (patch) | |
tree | 63234a34ca60f944fc1bc3469211b122969d0267 | |
parent | 9aece3aa53b56d096513ebfc48fba2cca625a299 (diff) |
start 5
-rw-r--r-- | 5.1.c | 74 | ||||
-rw-r--r-- | 5.2.c | 78 |
2 files changed, 152 insertions, 0 deletions
@@ -0,0 +1,74 @@ +#include <stdio.h> +#include <ctype.h> + +int getint(int *np); +char getch(void); +void ungetch(char input); + +int +main(void) +{ + int num; + + getint(&num); + + printf("%d\n", num); + + return 0; +} + +int +getint(int *np) +{ + int input, sign; + + /* skip space */ + while (isspace(input = getch())) + ; + + if (!isdigit(input) && input != EOF && 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'; + + *np *= sign; + + if (input != EOF) + ungetch(input); + + /* return last digit or 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"); +} @@ -0,0 +1,78 @@ +#include <stdio.h> +#include <ctype.h> + +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"); +} |