My code:
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;
}
The idea is to replace the input map consisting of chars 'a', 'b', c' with their values in int map. a = 6, b = -1, c = 9.
so an input like
5
aacbb
ababa
aaaaa
aaabb
bbbbb
should output like
669-1-1
6-16-16
66666
666-1-1
-1-1-1-1-1
When I'm inputting values in 2d array everything seems ok. Everything is ok with commented printf values, however when I try to output the whole map it's like:
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
which is clearly totally wrong. With linux I get a core dump instead of an output. I need an explanation why is this happening.
You don't have a default
case in the switch, so when you don't handle the input value the array is uninitialized when you print it.
The first time the loop runs, there is a '\n'
that was left by the previous scanf()
. The "%c"
specifier does consume it, so your first time in the loop, the value was already supplied without asking you, and since you are not handling the '\n'
in the switch, the corresponding array element is left uninitialized.
Change
scanf("%c", &inp)
to
scanf(" %c", &inp)
and it will work as you expect it.
And also, just in case add
default:
tab[b][a] = 0;
break;
to the switch
, to prevent passing uninitialized values to printf()
.