Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [c++] Leggere da file usando la gestione c++ like

    Salve ragazzi.
    Sto incontrando difficoltà nella lettura da file con accesso sequenziale utilizzando i metodi c++ like e non c like.
    questa è la mia classe arbitro (vi ricordo che è derivata dalla classe individuo quindi riporto prima quest'ultima)
    INDIVIDUO:
    Codice PHP:
    #include <string>
    using namespace std;
    class 
    individuo {
        public:
            
    string nome;
            
    string cognome;
            
    int eta;
            
    //Costruttore di default
            
    individuo() {
            
    nome "";
            
    cognome "";
            
    eta 0;
            }
            
    //Costruttore
            
    individuo (string namestring surnameint age) {
            
    nome name;
            
    cognome surname;
            
    eta age;
            }
            
    //Distruttore
            
    ~individuo() {
            
    cout << "Libero la memoria occupata...";
            }
    }; 
    ARBITRO
    Codice PHP:
    #include <iostream>
    #include <string>
    #include "individuo_class.h"
    using namespace std;
    //creo la classe arbitro derivata dalla classe individuo
    class arbitro: public individuo {
    public:
        
    string origine;
        
    //Costruttore di default
        
    arbitro() {
        
    nome "";
        
    cognome "";
        
    eta 0;
        
    origine "";
        }
        
    //costruttore
        
    arbitro(string namestring surnameint agestring born):individuo(name,surname,age) {
        
    origine born;
        }
        
    void visualizza();
    }; 
    ora il file cpp con i metodi sulla classe arbitro (in praticolare riportato il metodo visualizza)
    Codice PHP:
    #include <iostream>
    #include <string>
    #include <fstream>
    #include "arbitro_class.h"
    using namespace std;
    void arbitro::visualizza(){
        
    fstream fs;
        
    //apertura del file
        
    fs.open("arbitri.dat",ios::in|ios::binary);
        if (!
    fs.fail()) {
        
    //Il file non esiste non posso visualizzare nessun elenco di arbitri
        //Restituisco un messaggio di errore
        
    cout << "\n  Il file 'arbitri.dat' e' inesistente.\nNon e' stato inserito nessun arbitro!";
        } else {
        
    //Il file esiste quindi è stato inserito almeno un arbitro.
        //Stampo i titoli delle colonne
        
    cout << "Nome";
        
    cout << "\tCognome";
        
    cout << "\tEta'";
        
    cout << "\tOrigine";
        
    cout << "\n" << endl;
        
    //Mostro i risultati ordinati per ordine crescente di inserimento
        
    fs.read((char*)this,sizeof(*this));
        while(!
    fs.feof(fs)){
            
    cout << nome;
            
    cout << "\t" << cognome;
            
    cout << "\t" << eta;
            
    cout << "\t" << origine;
            
    cout << endl;
            
    fs.read((char*)this,sizeof(*this));
        }
        }
        
    fs.close();

    Ricevo un errore per quando riguarda la riga while(!fs.feof(fs)){
    in particolare mi avverte dell'impossibilità di sfruttare feof.
    Come mai?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    hum se non sbaglio per testare l'eof di un fstream si usa:

    fs.eof()

    che da true se si è giunti alla fine del file o meno, quindi nel while la condizione sarà:

    while(!fs.eof())
    cogli l'attimo

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    225
    gli errore mandali su cerr invece che cout.
    Riguardo il tuo problema la sintassi corretta è fs.eof()

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [c++] Leggere da file usando la gestione c++ like

    Meglio:
    codice:
    while (fs) {
    ...
    }
    In modo da testare tutti gli eventuali problemi di lettura.

    Originariamente inviato da theboss280489
    Codice PHP:
        //Mostro i risultati ordinati per ordine crescente di inserimento
        
    fs.read((char*)this,sizeof(*this)); 
    Diabolicum perseverare
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.