diff --git a/getchar.c b/getchar.c
new file mode 100644
index 0000000000000000000000000000000000000000..86e49d9a064fd69fb33792ee2cfa1b03487440d0
--- /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 27dd1dc4fb96a822b1d36d6dcb7c05cebc4a2e4a..a63ac749b8b55133b99e60dc7d532a505c953f5c 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')