求助!为什么定义无关变量后影响了输出结果?
在做论坛C语言题目时遇到的问题,如图红框部分,定义的两个变量,即使我后续完全没有使用,输出结果会变,而且成了乱码。但是不定义新的变量就正常输出。不应该呀,每次运行都这样吗? 发代码 本帖最后由 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;
}
14440315 发表于 2021-8-2 22:28
#include
#include
乱码了,用代码格式发,看看行不行
像这样
人造人 发表于 2021-8-2 22:32
emm, 怎么用代码格式回复... #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
代码我放在后面了 14440315 发表于 2021-8-2 22:34
代码我放在后面了
嗯,我研究研究 14440315 发表于 2021-8-2 22:34
if(abs > num)
{
max = j;
num = abs;
}
这里面的num和max不是无关变量啊 大马强 发表于 2021-8-2 22:42
这里面的num和max不是无关变量啊
这个,是我完全写完的代码....我发现除了上面格式乱码,结果是对的.... 那我手动改改 https://static01.imgkr.com/temp/548a0110a3a34c19a49ffead750d2680.jpg
我这警告了 我发现了,我在研究研究 大马强 发表于 2021-8-2 22:47
我这警告了
这里应该是str1-base;
复制过来有些地方可能漏了什么 变量没有初始化
#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;
}
strcat(str2, str3);
问题在这里 很神奇我调试了下
https://static01.imgkr.com/temp/a727044b862d4bc2ab9f5bb8604bbcb2.jpg
https://static01.imgkr.com/temp/632db38886514c25800a8f99268e4b32.jpg
上面的时注释前的,下面的时注释后的 人造人 发表于 2021-8-2 22:54
变量没有初始化
emm, 确实是的, 我以为编译器的问题,我去试了试网页的编译器能正常运行,结果是因为没有初始化 大马强 发表于 2021-8-2 22:59
很神奇我调试了下
哈哈哈,谢谢,问题找到了,两个字符数组初始化就正常了
页:
[1]