马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
int main()
{
char a[3][81]={'\0'};//为什么要有'\0'???
int i,j,sum[3][5];
int w_x=0,w_d=0,num=0,space=0,other=0;
printf("请输入三行文字:");
for(i=0;i<3;i++)
{
gets(a[i]);
for(j=0;j<81;j++)
{
if(a[i][j]<='z'&&a[i][j]>='a') w_x++;
else if(a[i][j]<='Z'&&a[i][j]>='A') w_d++;
else if(a[i][j]<='9'&&a[i][j]>='0') num++;
else if(a[i][j]==' ') space++;
else other++;
}
}
printf("大写字母有%d个,小写字母有%d个,数字有%d个,空格有%d个,其他字符有%d个",w_d,w_x,num,space,other);
return 0;
}
问题打在代码里的第四行了 不知道为什么a[3][81]={'\0'}。。。。。
原本我是只有int a[3][81];的 但结果运行有错 可是加了一个={'\0'}就没错了
为啥啊??求解!谢谢!!
本帖最后由 superbe 于 2019-12-27 19:40 编辑
char a[3][81]数组每行可以装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'}可以去掉。
|