Пока scanf читает после нажатия кнопки ввода, может быть проще прочитать строку как строку, а затем попытаться проанализировать ее. Вы можете исправить ввод с помощью backspace и т. Д. На полнофункциональном терминале, так что это немного удобнее для пользователя, чем getchar.
Мы ищем только однозначные цифры, верно?
Может быть, что-то вроде:
char buffer[SOMECOUNT];
int digits[4];
int read, i;
scanf("%s", buffer);
for(int i = 0; i < strnlen(buffer, SOMECOUNT); ++i)
{
if( read >= 4 )
break;
if( isdigit(buffer[i]) )
{
digits[read] = buffer[i] - '0';
read++;
}
}
if ( read < 4 )
printf(error...);
Конечно, эта SOMECOUNT
константа делает решение немного хрупким для неприятного ввода, поэтому вы можете использовать ограничение: scanf ("% 20s", buffer) или даже создать строку формата для включения SOMECOUNT.