char nome [100]; int matricola; |
// Verifichiamo che il numero di parametri sia corretto // (il nome del programma è contato come parametro) if ( argc != 3 ) {
// Apriamo subito il file per controllare quanti studenti ci sono dentro ifstream f (argv[2]); // Verifichiamo che il nome del file sia corretto if ( !f ) {
// Posizioniamoci alla fine del file f.seekg (0, ios::end); // la lunghezza del file divisa per la dimenzione dello struct // fornisce il numero di studenti già inseriti int l = f.tellg() / sizeof(studente); // Convertiamo il primo parametro in un numero intero int n = atoi (argv[1]); // Se il numero eccede il numero di studenti presenti nel file, o è minore di 1, // segnaliamo errore. if ( n < 1 || n > l ) {
// Dichiariamo una variabile di tipo studente studente s; // Posizioniamo il flusso all'inizio del blocco che ci interessa f.seekg ((n-1)*sizeof(studente), ios::beg); // Leggiamo il blocco nella variabile s f.read ((char*)&s, sizeof(studente)); // A questo punto il file non ci serve più f.close (); // Scriviamo a video i dati estratti cout << "Nome: " << s.nome << "\nMatricola: " << s.matricola << endl; return 0; |