14440315 发表于 2021-8-2 22:07:23

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

在做论坛C语言题目时遇到的问题,如图红框部分,定义的两个变量,即使我后续完全没有使用,输出结果会变,而且成了乱码。但是不定义新的变量就正常输出。

大马强 发表于 2021-8-2 22:22:34

不应该呀,每次运行都这样吗?

人造人 发表于 2021-8-2 22:25:42

发代码

14440315 发表于 2021-8-2 22:28:56

本帖最后由 14440315 于 2021-8-2 22:32 编辑

人造人 发表于 2021-8-2 22:25
发代码

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

int main()
{
        char str1;
        char str2;
        char str3;
        char base = ' ';
        char turn;
        int a, b, c;
        int d = 0;
        int max, num = 0;
        int i, j;
        int abs = {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 += 1;
                        }               
                }       
                base += 1;       
        }
       
        for(j=0; j<95; j++)
        {
                if(abs != 0)
                {
                        turn = j + 32;
                        str3 = turn;
                        strcat(str2, str3);
                        d += 1;
                }
               
                if(abs > num)
                {
                        max = j;
                        num = abs;
                }
        }
               
        printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", a, d);
        printf("它们是:%s\n", str2);
        printf("出现次数最多的是字符是‘%c’,它总共出现了%d次。\n", max+32, num);
       
        return 0;
}

人造人 发表于 2021-8-2 22:32:09

14440315 发表于 2021-8-2 22:28
#include
#include



乱码了,用代码格式发,看看行不行
像这样

14440315 发表于 2021-8-2 22:33:16

人造人 发表于 2021-8-2 22:32


emm, 怎么用代码格式回复...

14440315 发表于 2021-8-2 22:34:20

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

int main()
{
      char str1;
      char str2;
      char str3;
      char base = ' ';
      char turn;
      int a, b, c;
      int d = 0;
      int max, num = 0;
      int i, j;
      int abs = {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 += 1;
                        }               
                }      
                base += 1;      
      }
      
      for(j=0; j<95; j++)
      {
                if(abs != 0)
                {
                        turn = j + 32;
                        str3 = turn;
                        strcat(str2, str3);
                        d += 1;
                }
               
                if(abs > num)
                {
                        max = j;
                        num = abs;
                }
      }
               
      printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", a, d);
      printf("它们是:%s\n", str2);
      printf("出现次数最多的是字符是‘%c’,它总共出现了%d次。\n", max+32, num);
      
      return 0;
}

14440315 发表于 2021-8-2 22:34:56

人造人 发表于 2021-8-2 22:32


代码我放在后面了

人造人 发表于 2021-8-2 22:35:29

14440315 发表于 2021-8-2 22:34
代码我放在后面了

嗯,我研究研究

大马强 发表于 2021-8-2 22:42:51

14440315 发表于 2021-8-2 22:34

if(abs > num)
                {
                        max = j;
                        num = abs;
                }
这里面的num和max不是无关变量啊

14440315 发表于 2021-8-2 22:44:41

大马强 发表于 2021-8-2 22:42
这里面的num和max不是无关变量啊

这个,是我完全写完的代码....我发现除了上面格式乱码,结果是对的....

大马强 发表于 2021-8-2 22:45:44

那我手动改改

大马强 发表于 2021-8-2 22:47:36

https://static01.imgkr.com/temp/548a0110a3a34c19a49ffead750d2680.jpg
我这警告了

大马强 发表于 2021-8-2 22:49:21

我发现了,我在研究研究

14440315 发表于 2021-8-2 22:52:24

大马强 发表于 2021-8-2 22:47
我这警告了

这里应该是str1-base;
复制过来有些地方可能漏了什么

人造人 发表于 2021-8-2 22:54:42

变量没有初始化
#include<stdio.h>
#include<string.h>

int main()
{
    char str1;
    //char str2;
    //char str3;
    char str2 = {0};
    char str3 = {0};
    char base = ' ';
    char turn;
    int a, b, c;
    int d = 0;
    int max, num = 0;
    int i, j;
    int abs = {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 += 1;
            }               
      }      
      base += 1;      
    }

    for(j=0; j<95; j++)
    {
      if(abs != 0)
      {
            turn = j + 32;
            str3 = turn;
            strcat(str2, str3);
            d += 1;
      }

      if(abs > num)
      {
            max = j;
            num = abs;
      }
    }

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

    return 0;
}

人造人 发表于 2021-8-2 22:55:55

strcat(str2, str3);
问题在这里

大马强 发表于 2021-8-2 22:59:24

很神奇我调试了下
https://static01.imgkr.com/temp/a727044b862d4bc2ab9f5bb8604bbcb2.jpg
https://static01.imgkr.com/temp/632db38886514c25800a8f99268e4b32.jpg
上面的时注释前的,下面的时注释后的

14440315 发表于 2021-8-2 23:23:47

人造人 发表于 2021-8-2 22:54
变量没有初始化

emm, 确实是的, 我以为编译器的问题,我去试了试网页的编译器能正常运行,结果是因为没有初始化

14440315 发表于 2021-8-2 23:24:52

大马强 发表于 2021-8-2 22:59
很神奇我调试了下




哈哈哈,谢谢,问题找到了,两个字符数组初始化就正常了
页: [1]
查看完整版本: 求助!为什么定义无关变量后影响了输出结果?