Lo más sencillo es en vez de leer con
fscanf vayas leyendo con
fgetc.
La idea podría ser más o menos la siguiente:
Cita: // Rutina para leer el dni
1. leo caracter con fgetc
2. si no es un espacio:
2.1. acumulo el caracter correspondiente al campo DNI
2.2. salto a 1
// Rutina para saltar series de espacios en blanco
3. leo caracer con fgetc
4. si es un espacio salto a 3
// Rutina para leer el nombre
5. acumulo el caracter correspondiente al campo nombre
6. leo caracter con fgetc
7. si no es un espacio salto a 5
Y con repetir las dos últimas rutinas para el resto de campos lo tendrías hecho.
E incluso podrías generalizar aún más el proceso:
Para leer un campo:
Cita: 1. leo caracer con fgetc
2. si es un espacio salto a 1
3. acumulo el caracter al campo que corresponda
4. leo caracter con fgetc
5. si no es un espacio salto a 3
Repitiendo estas 5 rutinas en cascada puedes leer todos los campos de forma secuencial... ahora solo te faltaria pegarte con el salto de línea, no te lo iba a dar todo mascado, no? :)
Un saludo