Código
typedef struct { char nombre[MAX]; int renta; float nota; }lista;
Bien, si ese es el objetivo, hay un error. El problema es que cuando guardas la estructura en un archivo copiada de byte a byte, cuando copias la variable 'nombre', en realidad estás copiando la dirección de memoria donde reside el primer byte de la cadena.
Por ejemplo, declaro el siguiente objeto:
Código
lista persona; persona.nombre = "Esto es un nombre"; persona.renta = 14000; persona.nota = 5;
Bien, ahora la estructura, a nivel de bits, se vería (por ejemplo), así:
Código:
0xF4567E22 // Dirección de memoria
0x000036B0 // 14000
0x00000005 // 5
Como ves, en ningún sitio aparece el nombre como tal. Entonces, lo que tendrías que hacer es primero hacer un "write" con la cadena del nombre, y luego tendrías que guardar tanto la renta como la nota en binario... Puedes usar el siguiente fragmento:
Código
archivodat.write(persona.nombre, MAX); archivodat.write(reinterpret_cast<const char*>(&persona.renta), sizeof(int) + sizeof(float));