1. Help with a program

Hi everyone. Im new to C programming and having a trouble with writing a program which will display a suduko square (9 * 9 ints), with a 0 in each square. Then the user should be prompted to enter a number into a square identified by its row and column. Users should be continuously prompted until the square is full. Each time a new number is added, the square should be redrawn.

I've been trying to do it using 2d arrays and loops - a loop for rows inside a loop for columns, but am not even close to the solution...

Any ideas how to do this? Much appreciated.

2. Step 1 - show your current progress. Describe what you get and how it is different from your expectations

3. The one particular problem that I had was how to assign 0 to all the "spaces" in the 9x9 matrix, but with a bit of research i managed to find a solution...

Now im working on the user prompt part of the program... Will try to do it myself first, if i fail to find the solution, i;ll be back... hehe

P.S.

Current code:

Code:
```#include <stdio.h>
#define COLUMNS 9
#define ROWS 9

int main()	{

int sudoku[COLUMNS][ROWS];
int i, j;

for(i = 0; i < COLUMNS; i++)    {
for(j = 0; j < ROWS; j++) {
sudoku[i][j] = 0;
}
}

for(i = 0; i < COLUMNS; i++)    {
for(j = 0; j < ROWS; j++) {
printf("&#37;d", sudoku[i][j]);
}
printf("\n");
}
}```

4. Here's what I came up with so far... Although, it does what it supposed to, kind of, its very buggy and im afraid i dont have enough knowledge at my disposal to fix it... Here's the updated code:

Code:
```#include <stdio.h>
#define COLUMNS 9
#define ROWS 9

int main() {
int sudoku[COLUMNS][ROWS];
int i, j, a, b;
int num;

for(i = 0; i < COLUMNS; i++) {
for(j = 0; j < ROWS; j++) {
sudoku[i][j] = 0;
}
}

for(a = 0; a < COLUMNS; a++) {
for(b = 0; b < ROWS; b++) {
printf("Enter column: ");
scanf("&#37;d", &i);
printf("Enter row: ");
scanf("%d", &j);
printf("What number? ");
scanf("%d", &num);
sudoku[i][j] = num;
for(i = 0; i < COLUMNS; i++) {
for(j = 0; j < ROWS; j++) {
printf("%d", sudoku[i][j]);
}
printf("\n");
}
}
}
}```
This is by far the hardest program i decided to challenge thus far, so bear with me.
First of all, for the first row and first column i need to enter two zero's. I understand this is because the array starts with 0 and goes all the way to 8, but when i try to modify the loop to something like this:
Code:
`for(i = 1; i < (COLUMNS + 1); i++)`
...it doesnt work...
Another problem that i found is if i overwrite the same "space" more than once, then the program ends without covering the whole field (i.e. changing ALL zero's to a user desired number)...

5. This is by far the hardest program i decided to challenge thus far, so bear with me.
First of all, for the first row and first column i need to enter two zero's. I understand this is because the array starts with 0 and goes all the way to 8, but when i try to modify the loop to something like this:

Code:
`for(i = 1; i < (COLUMNS + 1); i++)`
...it doesnt work...
If you do so, consider adding -1 after i when you are accessing your array, i.e
Code:
`sudoku[i-1][j]`
Another problem that i found is if i overwrite the same "space" more than once, then the program ends without covering the whole field (i.e. changing ALL zero's to a user desired number)...
It does so because told it to do so... that's it, you'll be ask for ROW*COLUMN (or ROW˛) times to enter a value.. so if you "overwrite" a space, than there will be one space who's still at zero. One way to solve this is by having a better program logic . I'll give you two prototypes, you may want to implement the functions.

Code:
```#include <stdio.h>
#define COLUMNS 9
#define ROWS 9

typedef enum {FALSE = 0, TRUE} Bool;
/*	Defines a boolean */

void printSudoku(int sudoku[COLUMNS][ROWS]);
/*	Print to the screen a ROWS by COLUMNS sudoku */

Bool hasZeros(int sudoku[COLUMNS][ROWS]);
/*	Return TRUE if sudoku has at least one "space" who's
zero, else return FALSE */

int main() {
int sudoku[COLUMNS][ROWS];
int i, j, a, b;
int num;

for(i = 0; i < COLUMNS; i++) {
for(j = 0; j < ROWS; j++) {
sudoku[i][j] = 0;
}
}

while (hasZeros(sudoku) == TRUE)
{
printf("Enter column: ");
scanf("%d", &i);
printf("Enter row: ");
scanf("%d", &j);
printf("What number? ");
scanf("%d", &num);
sudoku[i][j] = num;

printSudoku(sudoku);
}
}```
There's also better way of doing this, like defining a type "Sudoku", but i won't go into details... except if you ask...

Last thing, to be more "C correct", you should define your 2x2 array as
Code:
`int sudoku[ROWS][COLUMNS];    // not int sudoku[COLUMNS][ROWS];`

6. Getting a good interface for Sudoku, is a challenge. Here's how I did it:

From the main menu, the user can choose to set up a puzzle board.

The display now shows a board, with nothing in the squares. Beneath that, is a square indicator: Square: 11 Number:

The "Square: " and "Number: ", designations, don't move. The number after the square changes with every time the user presses enter: 12, 13, ...19, 21, 22, 23...29 ...99

If the value input is 0, the square is left blank. If the value is 1 - 9, the square on the drawn board above it, is changed to reflect the new value, and the square number is incremented.

The board is displayed as:
-------------------------------------------------
Row 1: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
-------------------------------------------------
with 8 more rows. (Where the first row has the values here, of 1 through 9.)

So that's the display I use, and it's all text based but looks sharp due to some trickery

Perhaps the more important question is however, do you have an algorithm to solve the puzzle, or is that not a part of your program?

I found the solution to Sudoku to be quite tricky to program.

You may want to google sudoku and see how some website display their solver.