C 在while循环中同时使用isalpha和toupper可以得到;“索引超出范围”;
这是给出错误的代码。C 在while循环中同时使用isalpha和toupper可以得到;“索引超出范围”;,c,arrays,while-loop,indexoutofboundsexception,C,Arrays,While Loop,Indexoutofboundsexception,这是给出错误的代码。“类型'int[26]'的索引-65超出范围” 如果我把它改成这个 char x; int a[26] = {0}; printf("Enter first word: "); while ((x=((toupper(getchar()))) != '\n') if (isalpha(x)) { a[x-'A']++ ; } 它的行为符合要求,错误消失了。 在第一个导致错误的错误中,我做错了什么?错误消息显示索引-65,因此A[x
“类型'int[26]'的索引-65超出范围”
如果我把它改成这个
char x;
int a[26] = {0};
printf("Enter first word: ");
while ((x=((toupper(getchar()))) != '\n')
if (isalpha(x))
{
a[x-'A']++ ;
}
它的行为符合要求,错误消失了。
在第一个导致错误的错误中,我做错了什么?错误消息显示
索引-65
,因此A[x-'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
会丢失信息。好的,我已经按照你说的做了。但是为什么要删除toupper和isalpha标签呢?他们是否误导了?认为isalpha(anything)
可能等于'\n'
。isalpha
为“true”生成的值可能是任何非零整数
while (isalpha(x = toupper(getchar())))