Ho scritto questo codice
codice:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
struct studente {
char nome[50];
int voto;
};
int main(int argc, char *argv[])
{
char filename[] = "studenti.dat";
studente stud;
fstream fs;
// Fase 1. Dati precedenti
fs.open (filename,ios::binary | ios::in);
if (!fs || fs.eof())
{
// Non sono ancora presenti record
cout << "Nessun dato già presente\n";
}
else
{
// Stampiamo i record già presenti
while (fs.read((char*)&stud,sizeof stud))
cout << stud.nome << "\t" << stud.voto << endl;
}
fs.close();
system ("pause");
// Fase 2. Inserimento nuovi dati
fs.open (filename,ios::app | ios::binary);
if (!fs)
cout << "Errore nell'apertura del file";
int n;
cout << "Studenti da aggiungere: ";
cin >> n;
for (int i = 0; i < n; i++)
{
cout << "STUDENTE " << i+1 << endl;
cout << "Nome: ";
cin >> stud.nome;
cout << "Voto: ";
cin >> stud.voto;
fs.write((char*)&stud, sizeof stud);
}
fs.close();
system ("pause");
return 0;
}
ma ha un problema. Quando apre il file la seconda volta e verifica il successo dell'operazione
// Fase 2. Inserimento nuovi dati
fs.open (filename,ios::app | ios::binary);
if (!fs)
cout << "Errore nell'apertura del file";
stampa sempre il messaggio di errore, ed in effetti non scrive nulla sul file. Quale può essere il problema??