In C , how do I avoid walls of ifs using for loops? stackoverflow is requesting more text soo... Code Example:
if(masiv[0][0] == 'X'){
masiv[0][0] = '1';
}
if(masiv[0][1] == 'X'){
masiv[0][1] = '2';
}
if(masiv[0][2] == 'X'){
masiv[0][2] = '3';
}
if(masiv[1][0] == 'X'){
masiv[1][0] = '4';
}
if(masiv[1][1] == 'X'){
masiv[1][1] = '5';
}
if(masiv[1][2] == 'X'){
masiv[1][2] = '6';
}
if(masiv[2][0] == 'X'){
masiv[2][0] = '7';
}
if(masiv[2][1] == 'X'){
masiv[2][1] = '8';
}
if(masiv[2][2] == 'X'){
masiv[2][2] = '9';
}
CodePudding user response:
for (int y = 0; y < 3; y) {
for (int x = 0; x < 3; x) {
if (masiv[y][x] == 'X') {
masiv[y][x] = '1' 3 * y x;
}
}
}
Some explanation follows.
The following pattern is repeating:
if (masiv[...][...] == 'X') {
masiv[...][...] = '...';
}
Because it is repeating, we put it to the body of the for
loop.
We need 2 for
loops, because the first and the second indexes in masiv[...][...]
go over all possible values independently, and each variation is present. We will use a separate loop variable for each index, thus it becomes masiv[y][x]
.
The lower limit for y
is 0 (inclusive) and the upper limit for y
is 3 (exclusive), hence the for
line looks like: for (int y = 0; y < 3; y) {
. Similarly for x
.
We need a different character after the masiv[y][x] =
. Since digits are next to each other in the ASCII table (e.g. '5' 3 == '8'
). we use an expression like '1' ...y... ...x...
. The actual value starts from '1'
in the beginning, and it increases by 1 as x
increases, and it increases by 3 when y
increases. Thus it's '1' 3 * y x
.