La función fopen te devuelve un puntero a FILE, que es una estructura de datos definida en stdio.h. El error de segmentación te lo daba porque FILE no lo habías pasado como puntero pero estabas intentando utilizarlo en funciones que lo esperan como puntero.
Otra cosa que he visto es que cuando abres el fichero estás haciendo:
F = fopen(....);
y acto seguido haces
if ((F = fopen(....)) == NULL)
con lo cual estás abriendo el mismo fichero DOS veces sobre la misma estructura FILE. La segunda sobreescribe a la primera. Esto supone que, al finalizar el programa, aunque cierres el fichero (con fclose(F), que, por cierto, no veo que lo hayas hecho), aún se te puede quedar el fichero abierto, pudiendo pasar desde nada a encontrarte con un fichero inservible.
Y un mero detalle "estético", yo intercambiaría los nombres de las funciones. Estás llamando leer_fichero a la función donde estás leyendo la dificultad, y leer_dificultad a la función donde estás leyendo el fichero.
Yo dejaría algo así como:
Código C:
Ver originalvoid leer_dificultad(void)
{
char opcion, nombre_fichero[20];
opcion = leer_opcion(); // Esta presentaría el menú de opciones disponibles
switch (opcion)
{
case 'f':
strcpy(nombre_fichero
, "Facil"); break;
case 'm':
strcpy(nombre_fichero
, "Medio"); break;
case 'f':
strcpy(nombre_fichero
, "Dificil"); break;
}
leer_fichero(nombre_fichero);
}
void leer_fichero(char *nombre)
{
FILE *F;
if ((F
= fopen(nombreFichero
, "r")) == NULL
) {
printf ("Error en la apertura\n"); return;
}
// Aquí leo el contenido del fichero
}
Claro está, el tema de parámetros, declaraciones, etc, tendrás que ponérselo en función del resto de tu programa.