>>106153346
If I had to write a program that only reads numbers from stdin it'd look like this
#include <errno.h>
#include <unistd.h>

/* returns
* 0 success
* >0 error
* <0 EOF */
static int
next_int(int *p) {
static char buf[512];
static int i, n;
int err, sign, x;
int ret, c;
err = 1;
sign = 1;
x = 0;
for (; ; i++) {
if (i >= n) {
do
ret = read(0, buf, sizeof buf);
while (ret == -1 && errno == EINTR);
if (ret == -1)
return 1;
if (ret == 0) {
err = -err;
break;
}
n = ret;
i = 0;
}
c = buf[i];
if (err == 1)
switch (c) {
case '-':
sign = -1;
case '+':
err = 2;
case ' ': case '\n': case '\t':
continue;
}
if (c < '0' || c > '9')
break;
if (x >= 100000000)
return 1;
x = x*10 + c-'0';
err = 0;
}
if (!err)
*p = sign*x;
return err;
}