#include<stdio.h> int main() { char ch[20],*p; gets(ch); int a=0,b=0,c=0,d=0,e=0,i; p=ch; for(i=0;i<20;i++) if(*(p+i)>='A'&&*(p+i)<='Z') a=a+1; if(*(p+i)>='a'&&*(p+i)<='z') b=b+1; if(*(p+i)>='0'&&*(p+i)<='9') c=c+1; if(*(p+i)=' ') d=d+1; e=strlen(ch); printf("大写字母:%d\n小写字母:%d\n数字字符:%d\n空格:%d\n其他字符:%d\n",a,b,c,d,e); }改错
时间: 2023-10-23 11:12:46 浏览: 44
下面是改错后的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char ch[20], *p;
gets(ch);
int a = 0, b = 0, c = 0, d = 0, e = 0, i;
p = ch;
for (i = 0; i < 20 && *(p + i) != '\0'; i++) {
if (*(p + i) >= 'A' && *(p + i) <= 'Z') {
a++;
} else if (*(p + i) >= 'a' && *(p + i) <= 'z') {
b++;
} else if (*(p + i) >= '0' && *(p + i) <= '9') {
c++;
} else if (*(p + i) == ' ') {
d++;
} else {
e++;
}
}
printf("大写字母:%d\n小写字母:%d\n数字字符:%d\n空格:%d\n其他字符:%d\n", a, b, c, d, e);
return 0;
}
```
改动说明:
1. 加入了头文件string.h,以便使用函数strlen()
2. 修正了for循环中的判断条件,防止越界访问数组元素
3. 修正了if语句中的判断条件,以及增加了else语句,使得每个字符只能划分到一个类别中
4. 在else语句中增加了e的计数,统计其他字符的个数
5. 在最后输出结果时,按照题目要求的格式输出