段软w 发表于 2019-12-27 17:45:43

统计三行中的大小写字母 数字 空格 其他字符的个数

#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:38:29

本帖最后由 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'}可以去掉。

段软w 发表于 2019-12-27 19:57:19

superbe 发表于 2019-12-27 19:38
char a数组每行可以装81个字符,实际输入时每行可能不到81个字符,但在代码里for(j=0;j

哇!!谢谢你!!懂了懂了懂了
页: [1]
查看完整版本: 统计三行中的大小写字母 数字 空格 其他字符的个数