| | |
Please help! Sudoku in C
![]() |
•
•
Join Date: Oct 2006
Posts: 3
Reputation:
Solved Threads: 0
Hi, Friends!
I am doing my last year term project that needs me to use C and write a sudoku game. However, I don't know how to write the check part, can some of you help me a bit?
Here is my code:
Thank you friends!
I am doing my last year term project that needs me to use C and write a sudoku game. However, I don't know how to write the check part, can some of you help me a bit?
Here is my code:
C Syntax (Toggle Plain Text)
#include<stdio.h> #include<stdlib.h> #include<time.h> int x,y; int matrix[9][9], box[9]; char filename[30]; FILE *fp; void welcome(void); void rules(void); void level(void); void board(char); void enter(int); void check(int); main() { welcome(); rules(); } void welcome() { printf("Welcome to Sudoku Game Version 2.0\n\n"); printf("Thanks for playing this game!\n\nHope you enjoy!\n"); } void rules() { printf("\nRules to play:\n"); printf("Enter a numerical digit from 1 through 9 starting with various digits given in some cells.\n"); printf("Each row, column, and cell must contain only one instance of each numeral.\n"); printf("Are you ready for the game? (1 - Yes, 0 - No)\n"); scanf("%d", &x); if(x==1) level(); else exit(1); } void level() { printf("Which level do you want to play? (1-simple, 2-medium, 3-hard)\n"); scanf("%d", &y); switch(y) { case 1: printf("Please choose which puzzle you want to play!\n"); printf("Enter a no within 1-10. Add .txt after the no.\n"); printf("Puzzle to play: (Enter no, eg. 1.txt)\n"); scanf("%s", filename); board(filename); break; case 2: printf("Please choose which puzzle you want to play.\n"); printf("Enter a no within 11-20. Add .txt after the no.\n"); printf("Puzzle to play: (Enter no, eg. 11.txt)\n"); scanf("%s", filename); board(filename); break; case 3: printf("Please choose which puzzle you want to play.\n"); printf("Enter a no within 21-30. Add .txt after the no.\n"); printf("Puzzle to play: (Enter no, eg. 21.txt)\n"); board(filename); break; default: printf("Wrong Entering! No must be 1,2 or 3!\n"); level(); fclose(fp); } } void board(char filename[30]) { int i,j,z; fp=fopen(filename,"r"); if(fp==NULL) { printf("Cannot open file!\n"); level(); } while((z=fgetc(fp))!=EOF){ printf("|-|-|-|-|-|-|-|-|-|\n"); for(i=0;i<9;i++) { for(j=0;j<=9;j++) { z = fgetc(fp); printf("|%c",z); matrix[i][j] = z; } } printf("\n"); printf("|-|-|-|-|-|-|-|-|-|\n"); } } void enter(int matrix[9][9]) { int a,b,c; printf("Enter the position that you want to enter numbers: (eg. 1,1)\n"); scanf("%d,%d", &a,&b); if(matrix[a][b]==0) { printf("Wrong entering!\n"); printf("Please enter the position again!\n"); enter(matrix); } if(matrix[a][b]!=0) { printf("Enter the number that you want to put at the position:\n"); scanf("%d", &c); matrix[a][b] = c; check(); } }
Thank you friends!
Well, If you are checking after each entered number (which is what it looks like) you need to compare the entered number to the answer matrix (you could have this as a variable in the program somewhere) for the indicies input by the user. Return 1 if the same, 0 if not.
There are many ways to do this. This is just one possibility.
There are many ways to do this. This is just one possibility.
•
•
Join Date: Oct 2006
Posts: 3
Reputation:
Solved Threads: 0
•
•
•
•
Well, If you are checking after each entered number (which is what it looks like) you need to compare the entered number to the answer matrix (you could have this as a variable in the program somewhere) for the indicies input by the user. Return 1 if the same, 0 if not.
There are many ways to do this. This is just one possibility.
One bug in your program, when the user enters x and y coordinate where he wants to put his number, you dont check to see if those coordinates are within bound (i.e. a < 9 and a > 0) and the same with b. This may allow user to write at a location which doesnt belong to him.
Also you dont check whether the number entered by the user lies in the range of 1 to 9. Perform all the bound checks properly to ensure that your program doesnt crash and perform in unexpected manner.
The check function can be something simple like: (have not checked the function, just my logic)
Hope it helped, bye.
Also you dont check whether the number entered by the user lies in the range of 1 to 9. Perform all the bound checks properly to ensure that your program doesnt crash and perform in unexpected manner.
The check function can be something simple like: (have not checked the function, just my logic)
C Syntax (Toggle Plain Text)
{ int index = 1 ; for( index = 1; index <= 9; ++index ) { if( matrix[row][index] == value_entered ) { if( index == col ) { continue ; } else { printf( "The value is already present" ) ; return 0 ; // return false, condtition not satisfied } } } for( index = 1; index <= 9; ++index ) { if( matrix[index][col] == value_entered ) { if( index == row ) { continue ; } else { printf( "The value is already present" ) ; return 0 ; // return false, condtition not satisfied } } } return 1 ; // value not present already, so continue adding the new value to matrix }
Hope it helped, bye.
Last edited by ~s.o.s~; Oct 22nd, 2006 at 2:17 pm.
I don't accept change; I don't deserve to live.
![]() |
Similar Threads
- Sudoku Source Code (C++)
- Sudoku Source Code. (C#)
Other Threads in the C Forum
- Previous Thread: converting from string to char*
- Next Thread: need help on linked list
| Thread Tools | Search this Thread |
#include * adobe ansi api array asterisks binarysearch centimeter changingto char character cm copyimagefile cprogramme creafecopyofanytypeoffileinc createcopyoffile csyntax database directory dynamic feet fgets file fork frequency function getlasterror getlogicaldrivestrin givemetehcodez global grade graphics gtkgcurlcompiling gtkwinlinux hacking highest histogram include incrementoperators infiniteloop input interest kernel keyboard kilometer linked linkedlist linux linuxsegmentationfault list locate logical_drives looping loopinsideloop. lowest match matrix meter microsoft mqqueue mysql number odf opendocumentformat owf pattern pdf performance pointer posix probleminc process program programming radix recursion recv repetition research reversing scanf segmentationfault sequential shape single socket socketprograming standard string systemcall threads turboc unix user voidmain() wab whythiscodecausesegmentationfault windows.h windowsapi






