Bonjour je me suis lancé le défis de programmer un sudoku 9*9 pour m'entrainer. Le soucis c'est que je rencontre un problème sur lequel je bloque depuis maintenant quelques jours.
Voici le code, composé de plusieurs fonction que j'utilise entre elles :

//Affiche la grille par défaut
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
int print_grid(){
 
for(int j = 0; j < 9; j++){
    for(int i = 0; i < 9; i++){
        // tab[abscisses][ordonnées]
 
        tab[i][j] = '.';
        tab[0][9] = '2';
        tab[1][9] = '6';
        tab[7][1] = '7';
        tab[6][1] = '1';
        tab[2][2] = '3';
        tab[3][2] = '1';
        tab[5][2] = '6';
        tab[1][3] = '6';
        tab[4][3] = '5';
        tab[6][3] = '8';
        tab[8][3] = '3';
        tab[2][4] = '9';
        tab[3][4] = '2';
        tab[4][4] = '6';
        tab[5][4] = '1';
        tab[6][4] = '7';
        tab[0][5] = '5';
        tab[2][5] = '4';
        tab[4][5] = '8';
        tab[7][5] = '6';
        tab[3][6] = '8';
        tab[5][6] = '4';
        tab[6][6] = '3';
        tab[1][7] = '4';
        tab[2][7] = '8';
        tab[7][8] = '4';
        tab[6][8] = '9';
 
 
        printf("%c  ", tab[i][j]);
    }
printf("\n");
//
}
 
}

Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
//Vérifie si la le chiffre peut être placé ou pas.
void check_valid (int x, int y, char n){
 
if(y>9 || x > 9){
    printf("erreur x=%d et y=%d",x,y);
    exit(1);
    }
if(y < 0 || x < 0){
    printf("erreur");
    exit(1);
}
//Verification
 
    for(int i = 0; i < 9; i++){
        for(int j = 0; j < 9; j++){
            if(tab[x][y]!='.'){
                printf("blocked.\n");//Provisoire
                test = 0;
                exit(0);
                return 0;
 
            }else { //Si valide on print directement dans le nouveau tab
                    tab[x][y] = n;
                    Drawnew_grid(x,y,n);
                    test = 1;
                    return 1;
            }
        }
    } printf("%d",test);
 
}


Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
//Affiche la grille actualisé avec les coordonnées entrées par l'utilisateur 
int Drawnew_grid(int x, int y, char n){
 
for(int j = 0; j < 9; j++){
    for(int i = 0; i < 9; i++){
        // tab[abscisses][ordonnées]
        tab[i][j] = '.';
        tab[0][9] = '2';
        tab[1][9] = '6';
        tab[7][1] = '7';
        tab[6][1] = '1';
        tab[2][2] = '3';
        tab[3][2] = '1';
        tab[5][2] = '6';
        tab[1][3] = '6';
        tab[4][3] = '5';
        tab[6][3] = '8';
        tab[8][3] = '3';
        tab[2][4] = '9';
        tab[3][4] = '2';
        tab[4][4] = '6';
        tab[5][4] = '1';
        tab[6][4] = '7';
        tab[0][5] = '5';
        tab[2][5] = '4';
        tab[4][5] = '8';
        tab[7][5] = '6';
        tab[3][6] = '8';
        tab[5][6] = '4';
        tab[6][6] = '3';
        tab[1][7] = '4';
        tab[2][7] = '8';
        tab[7][8] = '4';
        tab[6][8] = '9';
 
        tab[x][y] = n;
 
        printf("%c  ", tab[i][j]);
}
 
printf("\n");
 
}
 
}


//Le main
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
#include <stdio.h>
#include <stdlib.h>
 
char tab[9][9];
void check_valid (int x, int y, char n);
int print_grid();
int Drawnew_grid(int x, int y, char n);
 
int empty = 54;
int test = 0;
int main(int argc, char *argv){
 
 
char c = '1';
int x = 0, y = 0;
 
print_grid();
 
//On test pour 10 tentatives 
for(int i = 0; i < 10; i++){
 
printf("\nEntrez une valeur x : ");
scanf("%d",&x);
 
printf("Entrez une valeur y : ");
scanf("%d",&y);
 
check_valid(x,y,c);
 
}
printf("%d", test);
 
return 0;
 
}


Le soucis est que lorsque je rentre nombre, à l'étape suivante celui ci n'est plus à sa position mais à la nouvelle position que je lui ai assigné. Les valeurs X et Y du main sont écrasées lorsque je rentre une nouvelle valeur à ces 2 variables.
Comment faire en sorte que la position du nombre initialement choisie lors de la première étape soit sauvegarder sur la grille ?? En d'autre terme comment faire pour que x et y ne soient pas écrasés par les nouvelles valeurs ? Soyez indulgent, je code en C depuis quelques semaines.