这是给出"index -65 out of bounds for type 'int [26]'"
char x;
int a[26] = {0};
printf("Enter first word: ");
while ((x=(isalpha(toupper(getchar())))) != '\n')
{
a[x-'A']++;
}
如果我把它改成这个
char x;
int a[26] = {0};
printf("Enter first word: ");
while ((x=((toupper(getchar()))) != '\n')
if (isalpha(x))
{
a[x-'A']++ ;
}
它表现得很好,错误消失了。 我在第一个导致错误的错误是什么?
答案 0 :(得分:1)
错误消息显示为index -65
,因此x-'A'
中的a[x-'A']
必须为-65。 'A'
的ASCII值为65,提供x-65 = -65
,其解析为x = 0
。
为什么x = 0
?
因为x
是isalpha
的结果,它返回一个布尔值。特别是,它会为 false 返回0
。
此外,将此布尔值与'\n'
进行比较是没有意义的。
你的意思是
while (isalpha(x = toupper(getchar())))
请注意,您的代码无法正确处理EOF
。 EOF
不是char
,这就是getchar
返回int
的原因。将结果分配给x
会丢失信息。