鱼C论坛

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

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

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

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

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

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

int main()
{
    char str1[128];
    //char str2[128];
    //char str3[2];
    char str2[128] = {0};
    char str3[2] = {0};
    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[i] - 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: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[i] - 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 | 显示全部楼层
乱码了,用代码格式发,看看行不行
像这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2021-8-2 22:34:20 | 显示全部楼层
#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:34:56 | 显示全部楼层

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

使用道具 举报

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

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

使用道具 举报

发表于 2021-8-2 22:42:51 | 显示全部楼层
if(abs[j] > num)
                {
                        max = j;
                        num = abs[j];
                }
这里面的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[i]-base;
复制过来有些地方可能漏了什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int main()
{
    char str1[128];
    //char str2[128];
    //char str3[2];
    char str2[128] = {0};
    char str3[2] = {0};
    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[i] - 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: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-9-21 22:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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