From ce95e8cc84f9fddda0a02d14ae9ec4cf3759bb21 Mon Sep 17 00:00:00 2001 From: Bruce Cowan <bruce@bcowan.me.uk> Date: Sat, 13 Oct 2018 20:18:36 +0100 Subject: [PATCH] Add insane number reading through getchar --- getchar.c | 27 +++++++++++++++++++++++++++ meson.build | 1 + 2 files changed, 28 insertions(+) create mode 100644 getchar.c diff --git a/getchar.c b/getchar.c new file mode 100644 index 0000000..86e49d9 --- /dev/null +++ b/getchar.c @@ -0,0 +1,27 @@ +#include <inttypes.h> +#include <stdint.h> +#include <stdio.h> + +#define LEN_DIGITS 18 // Safe digits of INT64_MAX + +int +main (void) +{ + int64_t value = 0; + + printf ("Put the number in: "); + + for (int i = 0; i < LEN_DIGITS; i++) + { + int ch; + if ((ch = getchar ()) == '\n') + break; + + int digit = ch - '0'; + value = 10 * value + digit; + } + + printf ("Value is %" PRId64 "\n", value); + + return 0; +} diff --git a/meson.build b/meson.build index 27dd1dc..a63ac74 100644 --- a/meson.build +++ b/meson.build @@ -18,6 +18,7 @@ executable('fib', 'fib.c') executable('fixed-sizeof', 'fixed-sizeof.c') executable('fgets', 'fgets.c') executable('gcd', 'gcd.c') +executable('getchar', 'getchar.c') executable('kepler', 'kepler.c', dependencies: libm) executable('next', 'next.c', dependencies: libm) executable('parrot', 'parrot.c') -- GitLab