вы можете использовать scanf , чтобы попытаться прочитать число (здесь я полагаю int ), и getchar (или эквивалентный), чтобы обойти оба недопустимых символадля числа и для определения EOF:
#include <stdio.h>
int main()
{
for (;;) {
int v;
if (scanf("%d", &v) == 1)
printf("read %d\n", v);
else
// bypass invalid char
if (getchar() == EOF)
break;
}
puts("done");
}
Выполнение компиляции в конце:
pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
12 aze -23
read 12
read -23
3 e
read 3
done
pi@raspberrypi:/tmp $
В поле raspberrypi я ввожу два последовательных control-d для указания EOF
Использование echo для создания EOF:
pi@raspberrypi:/tmp $ echo "123 aze -23 " | ./a.out
read 123
read -23
done
pi@raspberrypi:/tmp $
Когда есть недопустимый символ, который я выбрал для чтения только одного символа, также можно обойти остальныелиния, или прекратить читать цифры, это выбор.