dequantianhe 发表于 2019-12-1 13:07:20

头炸了!!!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 13:07:21

本帖最后由 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}

justjust001 发表于 2019-12-1 18:59:05

粗略看,都存在2个问题:
1. 定义了zifu和count 2个数组,但是很多地方都是直接操作的数组的指针。如果没猜错的话,LZ应该是想操作数组成员的值。
2. strlen()获取的是字符串指针之后,到以字符‘\0’为结尾的之间的字符个数。如果也没猜错的话,LZ是想获取每次更新后的字符数组中已经保存了的字符个数,从而可以遍历已存的字符,并根据情况新增字符到数组中。
    有个建议,LZ可以把zifu这个数组所有成员初始化为‘\0’,就可以使用strlen()来获取个数。
LZ可以先好好考虑下以上的2个问题并修改测试下。
页: [1]
查看完整版本: 头炸了!!!SIE19最后一道动手题,不能稳定执行,问题在哪里?