|
1鱼币
各位大佬,如题,小弟在做课后习题时,最后一题遇到了感觉很奇怪的问题,具体如下:
从图中可以看出,运行结果异常,出现了乱码,并且我输入了15个字符,但提示有22个不同的!
这种情况并非每次都发生,在输入字符数较少时运行正常,为了方便大佬调试问题,小弟又抄了一遍代码(PS代码是在虚拟机LINUX系统上执行的),代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char zifu[206],cc;
int count[206],i,length,flag = 0,sum=0,id=0;
// 初始化字符计数数组元素值都为0
for(i=0;i<206;i++)
{
count[i]=0;
}
printf("请输入英文文本:");
while(1){
length = strlen(zifu);//获取字符数组长度
cc=getchar();
if(cc=='\n')
{
break;
}
printf("length:%d",length);//添加的测试语句,看长度究竟如何变化的
for(i=0;i<length;i++)
{
if(cc==zifu[i])
{
count[i]++;
flag = 1;
}
}
if (flag ==0)
{
zifu[length] == cc;
printf("zifu_new:%c\n",zifu[length]);//测试语句,看新增元素是否正确
count[length]=1;
}
flag=0;
}
for(i = 0;i<=length;i++)
{
sum += count[i];
}
printf("你总共输入了%d个字符,其中不同的字符数有%d个\n",sum,length);
printf("他们是:");
for(i=0;i<=length;i++)
{
printf("%c",zifu[i]);
}
putchar('\n');
for(i=0;i<=length;i++)
{
if(count[id]<count[i])
{
id = i;
}
}
printf("出现次数最多的字符是'%c',它总共出现了%d次。\n",zifu[id],count[id]);
return 0;
}
请各位大佬费心指教!
本帖最后由 superbe 于 2019-12-1 18:29 编辑
1. zifu数组没有初始化,strlen需要\0才能得到正确的字符串长度
char zifu[206] = {0} 或 char zifu[206] = ""
2. if (flag ==0)
{
zifu[length] == cc; //这行 == 应该是 =
3. 有三处 for (i = 0; i <= length; i++) //这行 <= 应该是 <
贴代码最好用<>,不然都乱了,[ i ]被当成了斜体格式。
count数组初始化可以这样 int count[206] = {0}
|
最佳答案
查看完整内容
1. zifu数组没有初始化,strlen需要\0才能得到正确的字符串长度
char zifu[206] = {0} 或 char zifu[206] = ""
2. if (flag ==0)
{
zifu[length] == cc; //这行 == 应该是 =
3. 有三处 for (i = 0; i
|