头炸了!!!SIE19最后一道动手题,不能稳定执行,问题在哪里?
各位大佬,如题,小弟在做课后习题时,最后一题遇到了感觉很奇怪的问题,具体如下:从图中可以看出,运行结果异常,出现了乱码,并且我输入了15个字符,但提示有22个不同的!
这种情况并非每次都发生,在输入字符数较少时运行正常,为了方便大佬调试问题,小弟又抄了一遍代码(PS代码是在虚拟机LINUX系统上执行的),代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char zifu,cc;
int count,i,length,flag = 0,sum=0,id=0;
// 初始化字符计数数组元素值都为0
for(i=0;i<206;i++)
{
count=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)
{
count++;
flag = 1;
}
}
if (flag ==0)
{
zifu == cc;
printf("zifu_new:%c\n",zifu);//测试语句,看新增元素是否正确
count=1;
}
flag=0;
}
for(i = 0;i<=length;i++)
{
sum += count;
}
printf("你总共输入了%d个字符,其中不同的字符数有%d个\n",sum,length);
printf("他们是:");
for(i=0;i<=length;i++)
{
printf("%c",zifu);
}
putchar('\n');
for(i=0;i<=length;i++)
{
if(count<count)
{
id = i;
}
}
printf("出现次数最多的字符是'%c',它总共出现了%d次。\n",zifu,count);
return 0;
}
请各位大佬费心指教! 本帖最后由 superbe 于 2019-12-1 18:29 编辑
1.zifu数组没有初始化,strlen需要\0才能得到正确的字符串长度
char zifu = {0} 或char zifu = ""
2.if (flag ==0)
{
zifu == cc;//这行 == 应该是 =
3.有三处 for (i = 0; i <= length; i++) //这行 <= 应该是 <
贴代码最好用<>,不然都乱了,[ i ]被当成了斜体格式。
count数组初始化可以这样 int count = {0} 粗略看,都存在2个问题:
1. 定义了zifu和count 2个数组,但是很多地方都是直接操作的数组的指针。如果没猜错的话,LZ应该是想操作数组成员的值。
2. strlen()获取的是字符串指针之后,到以字符‘\0’为结尾的之间的字符个数。如果也没猜错的话,LZ是想获取每次更新后的字符数组中已经保存了的字符个数,从而可以遍历已存的字符,并根据情况新增字符到数组中。
有个建议,LZ可以把zifu这个数组所有成员初始化为‘\0’,就可以使用strlen()来获取个数。
LZ可以先好好考虑下以上的2个问题并修改测试下。
页:
[1]