El código directamente no compilaría. Primero, hay un 'else' que no está acompañado de su if, además, has cerrado los comentarios de múltiples líneas sin abrirlo.
Sinceramente, no sé si has analizado tu propio código.
En esa parte del código estás cambiando la dirección de memoria a la que apunta dat.nombre. Eso hace inválido lo que hayas almacenado en la cadena dat.nombre.
Para hacer lo que quieres hacer es mejor usar fscanf, puesto que esta función te detecta los espacios por ti.
Siento decirte esto, pero el código es un poquito desastre. Analízalo para intentar buscar una solución mejor a lo que quieres hacer.
Sinceramente, no sé si has analizado tu propio código.
Código (cpp) [Seleccionar]
for(int i=0;i<5;i++) {
dat.nombre='a'+i;
}
En esa parte del código estás cambiando la dirección de memoria a la que apunta dat.nombre. Eso hace inválido lo que hayas almacenado en la cadena dat.nombre.
Para hacer lo que quieres hacer es mejor usar fscanf, puesto que esta función te detecta los espacios por ti.
Siento decirte esto, pero el código es un poquito desastre. Analízalo para intentar buscar una solución mejor a lo que quieres hacer.