La funzione write usata in quel modo scrive semplicemente la rappresentazione binaria della struttura persona, esattamente come appare in memoria.
Con ogni probabilità (processore x86 a 32 bit) saranno 4 byte per l'ID, 50 byte per il nome, contenenti il testo vero e proprio fino al NUL e poi spazzatura a caso. I double vengono allineati a 4 o 8 byte, a seconda del compilatore e delle opzioni usate con esso, per cui ci dobbiamo aspettare dei byte di padding (dovrebbero essere comunque solo 2, visto che siamo al byte 54, per cui con 2 byte di padding si arriva a 56, multiplo sia di 4 che di 8) che potrebbero contenere qualunque cosa, e infine gli 8 byte del double.
Da un editor di testo "normale" naturalmente non riuscirai a vedere i numeri, poiché non sono formattati, ma viene scritta solo la loro rappresentazione binaria; in generale dovresti riuscire a vedere qualcosa di più con un editor esadecimale.
P.S.: ricordati di inserire il tuo codice tra i tag [code]...[/code], in modo che mantenga l'indentazione e risulti più leggibile.
codice:
#include <iostream>
#include <fstream>
using namespace std;
struct persona {
int ID;
char nome [50];
double stipendio;
};
persona dipendente;
int main (){
ofstream fout;
fout.open("anagrafe.dat",ios::app | ios::binary);
if (!fout) {
cout << "\n" << "==> ERRORE APERTURA FILE <==" << "\n\n"<< endl;
}
else {
cout << "matricola delm dipendente (0=fine ) : ";
cin >> dipendente.ID;
while (dipendente.ID != 0) {
cin.ignore(80,'\n');
cout << " cognome nome dipendente ;" ;
cin.getline(dipendente.nome,50);
cout <<" stipendio (euro)";
cin >> dipendente.stipendio;
fout.write((char *) &dipendente, sizeof (dipendente));
cout << "matricola delm dipendente (0=fine ) : ";
cin >> dipendente.ID;
}
fout.close();
}