统计三行中的大小写字母 数字 空格 其他字符的个数
#include<stdio.h>int main()
{
char a={'\0'};//为什么要有'\0'???
int i,j,sum;
int w_x=0,w_d=0,num=0,space=0,other=0;
printf("请输入三行文字:");
for(i=0;i<3;i++)
{
gets(a);
for(j=0;j<81;j++)
{
if(a<='z'&&a>='a') w_x++;
else if(a<='Z'&&a>='A') w_d++;
else if(a<='9'&&a>='0') num++;
else if(a==' ') space++;
else other++;
}
}
printf("大写字母有%d个,小写字母有%d个,数字有%d个,空格有%d个,其他字符有%d个",w_d,w_x,num,space,other);
return 0;
}
问题打在代码里的第四行了 不知道为什么a={'\0'}。。。。。
原本我是只有int a;的 但结果运行有错 可是加了一个={'\0'}就没错了
为啥啊??求解!谢谢!!
本帖最后由 superbe 于 2019-12-27 19:40 编辑
char a数组每行可以装81个字符,实际输入时每行可能不到81个字符,但在代码里for(j=0;j<81;j++)这行是按81个字符判断的,
假如你输入了10个字符(gets加上一个\0),后面70个都是内存中的随机值,可能造成误判。
加上 ={'\0'}后,将数组所有元素都初始化为\0,这个空字符的asii码是0,不在 大小写字母、数字、空格的范围之内,所以判断这些字符的个数是正确的。
但是else other++;仍会执行,所以判断其它字符的个数是不对的。
修改如下:
内层的for这行改成 for (j = 0; j<strlen(a[ i ]); j++) strlen()函数需要# include <string.h>
={'\0'}可以去掉。 superbe 发表于 2019-12-27 19:38
char a数组每行可以装81个字符,实际输入时每行可能不到81个字符,但在代码里for(j=0;j
哇!!谢谢你!!懂了懂了懂了
页:
[1]