Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/12/2010, 15:12
sundaysunday
 
Fecha de Ingreso: diciembre-2010
Mensajes: 1
Antigüedad: 13 años, 5 meses
Puntos: 0
Duda sobre Sudoku

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