Вы читаете со стандартного входа с 2 функциями: getchar()
и scanf()
. Вам нужно понять, как они работают.
getchar()
просто: он возвращает следующий доступный символ во входном потоке (или ждет его или возвращает EOF
)
scanf("%d", ...)
более сложный: сначала он по выбору отбрасывает пробелы (пробелы, вводы, табуляции, ...), затем читает столько символов, сколько возможно для представления целого числа, и останавливается на первом символе, который может ' может использоваться для целых чисел, например '\n'
.
Поскольку они у вас в цикле, ваш getchar()
вызов получит символ, который остановил scanf()
, и следующий scanf()
будет обработан оттуда.
Если вы введете что-то вроде "q1w22e333r4444"
(с MAX == 4), ваша программа будет работать.
Если вы вводите что-то вроде
q 1
w 22
e 333
r 4444
после первого прохождения цикла (где charray[0]
получает 'q'
и inarray[0]
получает 1
), getchar()
получит '\n'
, оставляя 'w'
"готовым" для scanf, что конечно терпит неудачу ... и затем "пойман" следующим getchar()
; и "22"
назначается в третий раз через цикл (на inarray[2]
).
Итак, вам нужно пересмотреть свой код.
Также scanf()
возвращает значение. Используйте это значение
if (scanf("%d", &inarray[i]) != 1) /* error */;