I'm trying to solve a sudoku checker for a game I'm building in C. Essentially these nested for loops are supposed to check through the smaller boxes of 9 numbers to ensure there are no duplicates. Unfortunately, the continue seems to make the checker not work. :(

123
456
576 -------the "5"s should trip up the function to send the show_banner() warning

The reason the first if statement exists is to make sure that the original coordinate is not check against itself. So, if I just typed the two in the above example, I want the for loops here to check everything, but the two that I typed (And in this case the warning would not be displayed.)

I troubleshooted the for loops and found that when I do eliminate the first if statement the banner does show up properly, but the loops are still checking the inputted value against itself.

i also tried inputting != into the top if statement and then placing the second if statement under the first one, but it still didn't work.

``````for (int k = 0; k < 2; k++)
{
for (int l = 0; l < 2; l++)
{
if (((((g.y/3)*3)+k) == g.y) && ((((g.x/3)*3)+l) == g.x))
{

continue;
}

if (g.board[((g.y/3)*3)+k][((g.x/3)*3)+l] == g.board[g.y][g.x])
{
show_banner("You sure that's a good move?");
show_cursor();
}

}
}``````
2
Contributors
1
3
Views
7 Years
Discussion Span
Last Post by thelamb

The 'math' in your if statements is very sloppy, it's hardly readable what's going on.

First off, why are you doing stuff like

``if( (g.y/3)*3 == something )``

g.y/3 * 3 is the same as g.y

``````if( g.y+k == g.y && g.x+l == g.x )

if( g.board[g.y+k][g.x+l] == g.board[g.y][g.x] )``````

So, now that things look clearer what exactly do you need to do?
- Take the element at [0,0], compare to every other element in the set.
- Take the element at [0,1], ...
- etc.

I think you can get that working.

Now, you say that the element that it currently being checked should not be checked to itself. Why not? Where is the harm?

If I check for duplicates in the array [ 0 1 2 2 ].
I'd take the first element 0, compare it to 0, 1, 2, 2 increasing a number when they are equal. At the end of this loop you can just say 'There are duplicates if I found more than 1 match'.

Hope that helped

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.