gpt4 book ai didi

C 突然弄乱了二维数组中的值

转载 作者:行者123 更新时间:2023-11-30 15:21:09 26 4
gpt4 key购买 nike

我的代码:

int main(){
int n;
scanf("%d", &n);
int a;
int b;
char inp;
int zx;
int zy;
int tab[n][n];
for(a = 0; a < n ; a++){
for(b = 0; b < n; b++){
scanf("%c", &inp);
switch(inp){
case 'a':
tab[b][a] = 6;
//printf("%d\n", tab[b][a]);
break;
case 'b':
tab[b][a] = -1;
//printf("%d\n", tab[b][a]);
break;
case 'c':
tab[b][a] = 9;
zx = b;
zy = a;
//printf("%d\n", tab[b][a]);
break;
}
}
}
for(a = 0; a < n ; a++){
for(b = 0; b < n; b++){
printf("%d ", tab[b][a]);
}
printf("\n");
}
return 0;
}

想法是将字符 'a'、'b'、c' 一致的输入映射替换为 int 映射中的值。 a = 6,b = -1,c = 9。

所以输入像

5
aacbb
ababa
aaaaa
aaabb
bbbbb

应该输出类似

669-1-1
6-16-16
66666
666-1-1
-1-1-1-1-1

当我在二维数组中输入值时,一切似乎都正常。带注释的 printf 值一切正常,但是当我尝试输出整个 map 时,如下所示:

622671 6 6 9 -1
6 -485498561 6 -1 6
-1 6 564564 6 6
6 6 6 4541512341 -1
-1 -1 -1 -1 564231

这显然是完全错误的。对于linux,我得到的是核心转储而不是输出。我需要解释为什么会发生这种情况。

最佳答案

开关中没有 default 大小写,因此,当您不处理输入值时,打印数组时数组不会被初始化。

第一次运行循环时,有一个 '\n' 是前一个 scanf() 留下的。 "%c" 说明符确实会消耗它,因此您第一次进入循环时,该值已经在没有询问您的情况下提供,并且由于您没有处理 '\n' 在 switch 中,相应的数组元素未初始化。

改变

scanf("%c", &inp)

scanf(" %c", &inp)

它会按照您的预期工作。

而且,以防万一添加

default:
tab[b][a] = 0;
break;

switch,以防止将未初始化的值传递给printf()

关于C 突然弄乱了二维数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29684968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com