鱼C论坛

 找回密码
 立即注册
查看: 743|回复: 19

[已解决]求助!为什么定义无关变量后影响了输出结果?

[复制链接]
发表于 2021-8-2 22:07:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在做论坛C语言题目时遇到的问题,如图红框部分,定义的两个变量,即使我后续完全没有使用,输出结果会变,而且成了乱码。但是不定义新的变量就正常输出。
最佳答案
2021-8-2 22:54:42
变量没有初始化
  1. #include<stdio.h>
  2. #include<string.h>

  3. int main()
  4. {
  5.     char str1[128];
  6.     //char str2[128];
  7.     //char str3[2];
  8.     char str2[128] = {0};
  9.     char str3[2] = {0};
  10.     char base = ' ';
  11.     char turn;
  12.     int a, b, c;
  13.     int d = 0;
  14.     int max, num = 0;
  15.     int i, j;
  16.     int abs[95] = {0};

  17.     printf("请输入英文文本:");
  18.     scanf("%[^\n]", str1);

  19.     a = strlen(str1);

  20.     while( base < 126)
  21.     {
  22.         for(i=0; i<a; i++)
  23.         {
  24.             b = str1[i] - base;
  25.             c = (int)base;      
  26.             if(b == 0)
  27.             {      
  28.                 abs[c-32] += 1;
  29.             }               
  30.         }      
  31.         base += 1;      
  32.     }

  33.     for(j=0; j<95; j++)
  34.     {
  35.         if(abs[j] != 0)
  36.         {
  37.             turn = j + 32;
  38.             str3[0] = turn;
  39.             strcat(str2, str3);
  40.             d += 1;
  41.         }

  42.         if(abs[j] > num)
  43.         {
  44.             max = j;
  45.             num = abs[j];
  46.         }
  47.     }

  48.     printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", a, d);
  49.     printf("它们是:%s\n", str2);
  50.     printf("出现次数最多的是字符是‘%c’,它总共出现了%d次。\n", max+32, num);

  51.     return 0;
  52. }
复制代码

增加的两个变量

增加的两个变量

把新加的两个变量注释掉

把新加的两个变量注释掉

增加变量后的结果

增加变量后的结果

不增加新变量的结果

不增加新变量的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-2 22:22:34 | 显示全部楼层
不应该呀,每次运行都这样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 22:25:42 | 显示全部楼层
发代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-2 22:28:56 | 显示全部楼层
本帖最后由 14440315 于 2021-8-2 22:32 编辑


#include<stdio.h>
#include<string.h>

int main()
{
        char str1[128];
        char str2[128];
        char str3[2];
        char base = ' ';
        char turn;
        int a, b, c;
        int d = 0;
        int max, num = 0;
        int i, j;
        int abs[95] = {0};
       
        printf("请输入英文文本:");
        scanf("%[^\n]", str1);
       
        a = strlen(str1);
       
        while( base < 126)
        {
                for(i=0; i<a; i++)
                {
                        b = str1 - base;
                        c = (int)base;       
                        if(b == 0)
                        {       
                                abs[c-32] += 1;
                        }               
                }       
                base += 1;       
        }
       
        for(j=0; j<95; j++)
        {
                if(abs[j] != 0)
                {
                        turn = j + 32;
                        str3[0] = turn;
                        strcat(str2, str3);
                        d += 1;
                }
               
                if(abs[j] > num)
                {
                        max = j;
                        num = abs[j];
                }
        }
               
        printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", a, d);
        printf("它们是:%s\n", str2);
        printf("出现次数最多的是字符是‘%c’,它总共出现了%d次。\n", max+32, num);
       
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 22:32:09 | 显示全部楼层
  1. 乱码了,用代码格式发,看看行不行
  2. 像这样
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-2 22:33:16 | 显示全部楼层

emm, 怎么用代码格式回复...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-2 22:34:20 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<string.h>

  3. int main()
  4. {
  5.         char str1[128];
  6.         char str2[128];
  7.         char str3[2];
  8.         char base = ' ';
  9.         char turn;
  10.         int a, b, c;
  11.         int d = 0;
  12.         int max, num = 0;
  13.         int i, j;
  14.         int abs[95] = {0};
  15.       
  16.         printf("请输入英文文本:");
  17.         scanf("%[^\n]", str1);
  18.       
  19.         a = strlen(str1);
  20.       
  21.         while( base < 126)
  22.         {
  23.                 for(i=0; i<a; i++)
  24.                 {
  25.                         b = str1 - base;
  26.                         c = (int)base;      
  27.                         if(b == 0)
  28.                         {      
  29.                                 abs[c-32] += 1;
  30.                         }               
  31.                 }      
  32.                 base += 1;      
  33.         }
  34.       
  35.         for(j=0; j<95; j++)
  36.         {
  37.                 if(abs[j] != 0)
  38.                 {
  39.                         turn = j + 32;
  40.                         str3[0] = turn;
  41.                         strcat(str2, str3);
  42.                         d += 1;
  43.                 }
  44.                
  45.                 if(abs[j] > num)
  46.                 {
  47.                         max = j;
  48.                         num = abs[j];
  49.                 }
  50.         }
  51.                
  52.         printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", a, d);
  53.         printf("它们是:%s\n", str2);
  54.         printf("出现次数最多的是字符是‘%c’,它总共出现了%d次。\n", max+32, num);
  55.       
  56.         return 0;
  57. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-2 22:34:56 | 显示全部楼层

代码我放在后面了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 22:35:29 | 显示全部楼层
14440315 发表于 2021-8-2 22:34
代码我放在后面了

嗯,我研究研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 22:42:51 | 显示全部楼层
  1. if(abs[j] > num)
  2.                 {
  3.                         max = j;
  4.                         num = abs[j];
  5.                 }
复制代码

这里面的num和max不是无关变量啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-2 22:44:41 | 显示全部楼层
大马强 发表于 2021-8-2 22:42
这里面的num和max不是无关变量啊

这个,是我完全写完的代码....我发现除了上面格式乱码,结果是对的....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 22:45:44 | 显示全部楼层
那我手动改改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 22:47:36 | 显示全部楼层

                               
登录/注册后可看大图

我这警告了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 22:49:21 | 显示全部楼层
我发现了,我在研究研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-2 22:52:24 | 显示全部楼层

这里应该是str1-base;
复制过来有些地方可能漏了什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 22:54:42 | 显示全部楼层    本楼为最佳答案   
变量没有初始化
  1. #include<stdio.h>
  2. #include<string.h>

  3. int main()
  4. {
  5.     char str1[128];
  6.     //char str2[128];
  7.     //char str3[2];
  8.     char str2[128] = {0};
  9.     char str3[2] = {0};
  10.     char base = ' ';
  11.     char turn;
  12.     int a, b, c;
  13.     int d = 0;
  14.     int max, num = 0;
  15.     int i, j;
  16.     int abs[95] = {0};

  17.     printf("请输入英文文本:");
  18.     scanf("%[^\n]", str1);

  19.     a = strlen(str1);

  20.     while( base < 126)
  21.     {
  22.         for(i=0; i<a; i++)
  23.         {
  24.             b = str1[i] - base;
  25.             c = (int)base;      
  26.             if(b == 0)
  27.             {      
  28.                 abs[c-32] += 1;
  29.             }               
  30.         }      
  31.         base += 1;      
  32.     }

  33.     for(j=0; j<95; j++)
  34.     {
  35.         if(abs[j] != 0)
  36.         {
  37.             turn = j + 32;
  38.             str3[0] = turn;
  39.             strcat(str2, str3);
  40.             d += 1;
  41.         }

  42.         if(abs[j] > num)
  43.         {
  44.             max = j;
  45.             num = abs[j];
  46.         }
  47.     }

  48.     printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", a, d);
  49.     printf("它们是:%s\n", str2);
  50.     printf("出现次数最多的是字符是‘%c’,它总共出现了%d次。\n", max+32, num);

  51.     return 0;
  52. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 22:55:55 | 显示全部楼层
strcat(str2, str3);
问题在这里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 22:59:24 | 显示全部楼层
很神奇我调试了下

                               
登录/注册后可看大图


                               
登录/注册后可看大图

上面的时注释前的,下面的时注释后的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-2 23:23:47 | 显示全部楼层

emm, 确实是的, 我以为编译器的问题,我去试了试网页的编译器能正常运行,结果是因为没有初始化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-2 23:24:52 | 显示全部楼层
大马强 发表于 2021-8-2 22:59
很神奇我调试了下

哈哈哈,谢谢,问题找到了,两个字符数组初始化就正常了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 21:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表