Code:
#include <stdio.h>
/* Data declarations */
struct sudoCell
{
int digit;
int given;
};
/* Function declarations */
void getGivens(struct sudoCell[9][9]); /* User enters starting grid */
void sudoPrint(struct sudoCell[9][9]); /* Print current state */
int sudoSolver(struct sudoCell[9][9]); /* Sudoku solver */
int main()
{
int row, col, digit;
struct sudoCell grid[9][9]; /* Sudoku grid */
/* Get starting grid pattern fom user */
getGivens(grid); /* Get starting pattern */
sudoPrint(grid); /*Print starting pattern */
/* Call solver for Sudoku pattern */
while (sudoSolver(grid))
{
sudoPrint(grid);
getchar();
}
printf("That's all folks\n");
getchar();
return 0;
}
void getGivens(struct sudoCell grid[9][9]) /* User enters starting pattern */
{
int row, col, digit;
char instring[50];
printf("Enter Sudoku pattern line by line.\n");
printf("Enter \'0\' for each undetermined cell\n");
printf("Enter a digit 1..9 followed by a space for each starting cell\n");
for (row=0; row<9; ++row)
{
/* Users dont understand rows numbered 0 */
printf("Enter row %d: ", row+1);
fgets(instring, sizeof(instring), stdin);
sscanf(instring, "%d %d %d %d %d %d %d %d %d",
&grid[row][0].digit, &grid[row][1].digit,
&grid[row][2].digit, &grid[row][3].digit,
&grid[row][4].digit, &grid[row][5].digit,
&grid[row][6].digit, &grid[row][7].digit,
&grid[row][8].digit);
for (col=0; col<9; ++col)
grid[row][col].given = grid[row][col].digit>0;
}
return;
}
void sudoPrint(struct sudoCell grid[9][9]) /* Print grid */
{
/* Line drawing characters from code page 437 */
const char SP = ' '; const char HB = 0xC4;
const char VB = 0xB3; const char CRS = 0xC5;
const char DVB = 0xBA; const char DHB = 0xCD;
const char DLL = 0xC8; const char DLR = 0xBC;
const char DUL = 0xC9; const char DUR = 0xBB;
const char DLT = 0xCC; const char DRT = 0xB9;
const char DTT = 0xCB; const char DBT = 0xCA;
const char DCR = 0xB6; const char DLST = 0xC7;
const char DRST = 0xB6; const char DTST = 0xD1;
const char DBST = 0xCF; const char DVSB = 0xD7;
const char DHSB = 0xD8;
int row, col;
char ch;
/* Top Border */
printf("%c", DUL);
for (col=0;col<8; ++col)
if (col%3 !=2)
printf("%c%c%c%c", DHB, DHB, DHB, DTST);
else
printf("%c%c%c%c", DHB, DHB, DHB, DTT);
printf("%c%c%c%c\n", DHB, DHB, DHB, DUR);
/* Rows */
for (row=0; row<9; ++row)
{
/* Data Row */
printf("%c", DVB);
for (col=0; col<9; ++col)
{
if (grid[row][col].digit == 0) ch = SP;
else ch = grid[row][col].digit+'0';
if (col%3 !=2) printf("%c%c%c%c", SP, ch, SP, VB);
else printf("%c%c%c%c", SP, ch, SP, DVB);
}
printf("\n");
/* Border below data row */
if (row<8)
{
if (row%3 !=2)
printf("%c", DLST);
else
printf("%c", DLT);
for (col=0; col<8; ++col)
{
if (row%3 != 2)
printf("%c%c%c", HB, HB, HB);
else
printf("%c%c%c", DHB, DHB, DHB);
if (col%3 != 2)
if (row%3 != 2)
printf("%c", CRS);
else
printf("%c", DHSB);
else
if (row%3 != 2)
printf("%c", DVSB);
else
printf("%c", DCR);
}
if (row%3 != 2)
printf("%c%c%c%c\n", HB, HB, HB, DRST);
else
printf("%c%c%c%c\n", DHB, DHB, DHB, DRT);
}
}
/* Bottom border */
printf("%c", DLL);
for (col=0; col<8; ++col)
if (col%3 != 2)
printf("%c%c%c%c", DHB, DHB, DHB, DBST);
else
printf("%c%c%c%c", DHB, DHB, DHB, DBT);
printf("%c%c%c%c\n", DHB, DHB, DHB, DLR);
return;
}
/* Solver for Sudoku grid */
int sudoSolver(struct sudoCell grid[9][9])
{
return 0; /* for the time being until I figure you out */
}
now I have to test the first cell for anything in it I imagine with a if statement maybe if(grid[0][0].digit == '\0')