Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: [C++] Lettura da file

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    98

    [C++] Lettura da file

    Ho creato un semplicissimo programma che dopo aver fatto inserire i dati di una struttura, li copia nel file, ed in seguito li ordina, ma solo nella struttura, lasciando il vecchio ordinamento nel file.
    Quando vado a leggere da file, leggo come se anche esso fosse stato ordinato ed inoltre il ciclo di uscita va in loop, continuando a stampare dati random.

    codice:
    #include <iostream>
    #include <string.h>
    #include <fstream.h>
    
    using namespace std;
    
    class Madre
    {
        protected:
                fstream file;
                struct studente
                {
                    char nome[10];
                    int eta;
                }pprova[5];
    
        public:
                Madre();
                void inserimento();
                void lettura();
    };
    
    void Madre:: inserimento()
    {
        file.open("Prova.txt", ios:: app);
        int i;
    
        for(i=0;i<2;i++)
        {
            cout << "Inserisci il " << i+1 << "^ nome ";
            cin >> pprova[i].nome;
    
            cout << "Inserisci la " << i+1 << "^ eta ";
            cin >> pprova[i].eta;
    
            cout << endl;
    
            file << pprova[i].nome << " " << pprova[i].eta;
        }
        if(strcmp(pprova[0].nome, pprova[1].nome) > 0)
        {
            pprova[3] = pprova[0];
            pprova[0] = pprova[1];
            pprova[1] = pprova[3];
        }
    
        for(i=0;i<2;i++)
            cout << "Dati " << i+1  << "^ persona:\n" << "Nome: " << pprova[i].nome << "\nEta: " << pprova[i].eta << "\n\n";
    
        file.close();
    }
    
    void Madre:: lettura()
    {
        file.open("Prova.txt", ios:: in);
        cout << "\n\nVisualizzazione file:\n";
        int i=0;
    
        while(!file.eof())
        {
            file >> pprova[i].nome >> pprova[i].eta;
            cout << pprova[i].nome << " " << pprova[i].eta << endl;
            i++;
            system("PAUSE");
        }
        file.close();
    }
    
    int main()
    {
        Madre a;
        a.inserimento();
        system("PAUSE");
        a.lettura();
    }
    Ultima modifica di Tiime; 02-05-2014 a 11:38

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ti consiglio di leggere così i dati

    codice:
        file >> pprova[i].nome >> pprova[i].eta;
        while(file)
        {
            cout << pprova[i].nome << " " << pprova[i].eta << endl;
            i++;
        file >> pprova[i].nome >> pprova[i].eta;
        }
    Inoltre assicurati che il file venga cancellato prima di fare una prova visto che i dati sono aggiunti ai precedenti.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    98
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Ti consiglio di leggere così i dati

    codice:
        file >> pprova[i].nome >> pprova[i].eta;
        while(file)
        {
            cout << pprova[i].nome << " " << pprova[i].eta << endl;
            i++;
        file >> pprova[i].nome >> pprova[i].eta;
        }
    Inoltre assicurati che il file venga cancellato prima di fare una prova visto che i dati sono aggiunti ai precedenti.
    Con questo ciclo non stampa nemmeno il 1° record

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Veramente a me funziona perfettamente.

    Probabilmente il tuo compilatore C++ ha qualche bug nella gestione dei file ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    98
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Veramente a me funziona perfettamente.

    Probabilmente il tuo compilatore C++ ha qualche bug nella gestione dei file ...
    Aspetto il parere di qualcun altro allora.
    Nel mentre faccio una domanda sulla lettura su file: caricando in memoria centrale un record come ad esempio
    codice:
    file >> pprova[i].nome >> pprova[i].eta;
    Ciò che in precedenza conteneva, non andrebbe perso?

    Mi spiego meglio. Nel caso del mio programma, pprova[i].nome potrebbe non contenere ciò che conteneva in precedenza. Leggendo con l'istruzione di sopra, qualora il pprova[i].nome fosse diverso da ciò che effettivamente c'è scritto in quel punto del file, il contenuto di pprova[i].nome verrebbe cambiato?
    Ultima modifica di Tiime; 02-05-2014 a 14:11

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se la lettura avviene, il contenuto precedente viene ovviamente cambiato.

    Ma devi accertarti che effettivamente la lettura avvenga.

    Esegui passo passo il programma.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    98
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Se la lettura avviene, il contenuto precedente viene ovviamente cambiato.

    Ma devi accertarti che effettivamente la lettura avvenga.

    Esegui passo passo il programma.
    L'errore era che nel fopen non ho scritto come modalità di apertura out e quindi il file non veniva nemmeno creato. Comunque... Che condizione posso usare dal ciclo perché sia file che file.eof, leggono una volta in più del dovuto

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    98
    UP

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Di quale codice parli ? Del ciclo che ti ho suggerito o di quello che hai usato tu?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    98
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Di quale codice parli ? Del ciclo che ti ho suggerito o di quello che hai usato tu?
    Entrambi leggono una volta in più del dovuto

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 © 2024 vBulletin Solutions, Inc. All rights reserved.