Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703

    [c++]stampa a video, da file, doppia

    Il codice che vi propongo ora mi legge in un file di testo delle stringhe, a queste stringhe viene associata l'estensione, in questo modo posso aprire i file singoli e l'obbiettivo è stamparne a video il contenuto...
    La funzione di per se funziona, tuttavia non riesco a capire perchè mi doppia l'ultimo dato;
    i file singoli hanno questa struttura:
    età:14
    scuola:xxxx
    celibe:si

    ecc ecc.. ovviamente i dati li ho inventati sul momento.. ^^
    codice:
    void tot()
            {
                int j=0;
                totalunni = "totalunni.txt";  //file che contiene le stringhe associate al singolo alunno
                fstream totalunni (totalunni.c_str(),ios::in);
                while(totalunni)
                {
                    totalunni.getline(riga_letta[j++],MAX_LINE_LEN);
    
                }
                totmatricole.close();
                for(int y = 0 ; y < j-1 ; y++)
                            {
    
                                 x = riga_letta[y];
                                 x=x+".txt";
    
                                 fstream stampa_alunno(x.c_str(),ios::in);
                                 while(stampa_alunno)
                                 {
                                     stampa_alunno >> z;
                                     cout << z << endl;
                                 }
                            }
    l'output è di questo genere:

    id:4522
    nomeeter
    cognome:griffin
    luogo:roma
    luogo:roma

    viene ripetuto 2volte l'ultimo dato O_o in quale punto del ciclo sbaglio?? :master: grassie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    up..almeno un vaga idea del perchè di questo errore?! :master:

  3. #3
    codice:
                                 while(!stampa_alunno.eof())
                                 {
                                     stampa_alunno >> z;
                                     cout << z << endl;
                                 }
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    ehm ^^
    codice:
     while(!stampa_alunno.eof())
                                 {
                                     stampa_alunno >> z;
                                     cout << z << endl;
                                 }
    il ciclo viene eseguito fino alla fine del file(eof), e ad ogni iterazione viene assegnato alla variabile z il contenuto dell'oggetto di flusso stampa_alunno, dopodichè viene stampata a video z.. non capisco dove sbaglio..

    forse l'ho interpretato male io il code..grazie ^^

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Originariamente inviato da cleaner
    ehm ^^
    Non ho capito se l'hai provato come ti ha suggerito di modificare il ciclo MItaly ... e se hai ancora il problema ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    ho ritentato un'altra volta ma con la propietà .eof() va addirittura in ciclo infinito..
    l'ultimo dato, nell'esempio postato è:
    luogo:roma
    viene ripetuto infine volte..non riesco propio a capire dove sta l'errore..qualche idea?!altrimenti se avete una soluzione diversa per prendere in input ogni linea e stamparla a video..

    la procedura che dovrebbe fare la funzione è questa:

    1) Prende da un file delle linee --> ex. 1234
    2) aggiunge alle linee una estensione, quindi di fatto diventa una stringa --> ex 1234.txt
    3) la stringa la uso per aprire i file singoli, a video devo stamparne più di uno, funziona, solo la rindondanza di quel dato non ha senso O_o

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Prova cosi'

    codice:
    fstream stampa_alunno(x.c_str(),ios::in);
    stampa_alunno >> z;
    while(stampa_alunno)
    {
       cout << z << endl;
       stampa_alunno >> z;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    funzica ^^ però sinceramente non ho capito bene il perchè della seconda istruzione, provo a commentarla:

    codice:
    fstream stampa_alunno(x.c_str(),ios::in);  //apro il file in lettura
    stampa_alunno >> z;  // nella variabile di tipo string z, finisce la prima riga
    while(stampa_alunno)
    {
       cout << z << endl;  // stampo la prima riga presa, di fatto quello contenuto in z
       stampa_alunno >> z; // prendo la riga successiva e la pongo in z
    }
    mmm..
    :master:
    quindi in pratica prendo la riga fuori dal ciclo e la stampo dentro, solo che non capisco il perchè di due istruzioni di input stampa_alunno >> z

    Un'ultima cosa, in questo modo però mi stampa tutto a video, "attaccato", se io sapessi quanti sono i campi, posso di fatto intercettare la linea e piazzarci un bel carattere separatore..avevo pensato ad una cosa del genere:

    codice:
    int conta_righe=0;
    fstream stampa_alunno(x.c_str(),ios::in);
    stampa_alunno >> z;
    while(stampa_alunno)
    {
       conta_righe ++;
       if(conta_righe < 7) cout << z << endl;  //7campi per ogni alunno
       else cout << "*********"; //inserisco un carattere che separa i dati da un alunnno all'altro
       stampa_alunno >> z;
    }
    grassie mille in anticipo



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.