From 17dfe130ef58ed790d46b01637b1a12afce456bd Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Mon, 27 Dec 2021 18:17:39 +0800 Subject: 5.1 --- 5/1.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 5/1.c diff --git a/5/1.c b/5/1.c new file mode 100644 index 0000000..19e4bf2 --- /dev/null +++ b/5/1.c @@ -0,0 +1,53 @@ +#include +#include + +#define BUFSIZE 100 + +int getint(int *); + +int main(int argc, char *argv[]) { + int rc, n; + + while ((rc = getint(&n)) != EOF && rc != 0) + printf("\t%d\n", n); + + return 0; +} + +char buf[BUFSIZE]; +int bufp = 0; + +int getch() { return (bufp > 0) ? buf[--bufp] : getchar(); } + +void ungetch(int c) { + if (bufp >= BUFSIZE) + printf("ungetch: too many characters\n"); + else + buf[bufp++] = c; +} + +int getint(int *pn) { + int c, sign; + + while (isspace(c = getch())) + ; + + if (!isdigit(c) && c != EOF && c != '+' && c != '-') { + ungetch(c); + return 0; + } + + sign = (c == '-') ? -1 : 1; + + if (c == '+' || c == '-') + c = getch(); + + for (*pn = 0; isdigit(c); c = getch()) + *pn = 10 * *pn + (c - '0'); + *pn *= sign; + + if (c != EOF) + ungetch(c); + + return c; +} \ No newline at end of file -- cgit v1.2.3