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:
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ó.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 }
Código:
Un saludo 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 }