В сообщении об ошибке указано index -65
, поэтому x-'A'
в a[x-'A']
должно быть -65. Значение ASCII 'A'
равно 65, что дает x-65 = -65
, которое разрешается как x = 0
.
Почему x = 0
?
Поскольку x
является результатом isalpha
, который возвращает логическое значение. В частности, он возвращает 0
для false .
Также нет смысла сравнивать это логическое значение с '\n'
.
Вы имели в виду
while (isalpha(x = toupper(getchar())))
Обратите внимание, что ваш код не обрабатывает EOF
правильно. EOF
не является char
, поэтому getchar
возвращает int
. Присвоение результата x
приводит к потере информации.