Buenas noches a todos. Andaba con un sudoku que tengo que hacer para clase, y me he quedado atascado en un punto.
El tema es que, a partir de una función "menú", el usuario decide si quiere jugar al Sudoku, o al Harakiri. Y, una vez elegida esa opción, el nivel de dificultad. Por lo que, dependiendo de las opciones elegidas, tendrá que cargarse un archivo u otro (hay 6 posibilidades) con los números que conforman el tablero. Mi idea sería que, en una función, se abriese el archivo, dependiendo del tipo de juego y la dificultad. Y usar ese archivo en otra función, la cual trataría con él para guardar su contenido en un array de char. El código me da error y me temo que es porque no se cómo pasar un argumento tipo FILE por valor (si es que se puede).
Código:
void leer_fichero(char opcion, char nivel, FILE *F){
if (opcion == 's'){ //Si queremos jugar sl sudoku
if (nivel == 'f'){ //Y queremos jugar al nivel fácil
F = fopen ("SudokuFacil.txt", "r");
if ((F = fopen("SudokuFacil.txt", "r")) == NULL) {
printf ("Error en la apertura. Es posible que el fichero no exista \n ");
}
} else if (nivel == 'm'){
/*hacemos lo mismo para el nivel medio*/
}else{
/*Igual para difícil*/
}
} else {
}
}
void leer_dificultad(FILE F, char tabl[TAMH][TAMH]){
char num;
int i = 0;
int j = 0;
do{
if (num != EOF){
num = (char)getc(F); //Leo caracter del fichero
tabl[i][j] = num; //Y lo guardo en la posición correspondiente
j++; //pasamos a la siguiente columna del tablero
if (j == 9){ //El tablero solo tiene 9 casillas. Al llegar a la novena, incrementamos una fila y ponemos las columnas a 0.
j = 0;
i++;
}
}
}while(num != EOF);
mostrar_tablero(tabl); //función que muestra el sudoku por pantalla
}
Visto que daba fallo de segmentación (el problema venía de la función leer_dificultad, porque por leer_fichero si llegaba a entrar), decidí cambiar la primera función para que guardase el nombre del archivo en un array de String, para luego pasárselo como parámetro por valor a FILE en la segunda función. Tampoco funcionó.
Código:
void leer_fichero(char opcion, char nivel, char *nombreFichero[50]){
if (opcion == 's'){ //Si queremos jugar sl sudoku
if (nivel == 'f'){ //Y queremos jugar al nivel fácil
strcpy(*nombreFichero, "SudokuFacil.txt");
} else if (nivel == 'm'){
/*hacemos lo mismo para el nivel medio*/
}else{
/*Igual para difícil*/
}
} else {
}
}
void leer_dificultad(FILE F, char tabl[TAMH][TAMH], char nombreFichero[50]){
char num;
int i = 0;
int j = 0;
F = fopen (nombreFichero, "r"); //le pasamos la cadena de texto guardada, que es el nombre del fichero.
if ((F = fopen(nombreFichero, "r")) == NULL) {
printf ("Error en la apertura. Es posible que el fichero no exista \n ");
}
do{
if (num != EOF){
num = (char)getc(F); //Leo caracter del fichero
tabl[i][j] = num; //Y lo guardo en la posición correspondiente
j++; //pasamos a la siguiente columna del tablero
if (j == 9){ //El tablero solo tiene 9 casillas. Al llegar a la novena, incrementamos una fila y ponemos las columnas a 0.
j = 0;
i++;
}
}
}while(num != EOF);
mostrar_tablero(tabl); //función que muestra el sudoku por pantalla
}
Un saludo