Oppure

Loading
21/04/13 23:09
gian8
Salve
sto creando questo programmino che deve leggere 2 file .txt
e poi successivamente confrontarli e mostrare le parole per cui differiscono.
mi è sorto un problema:

Utilizzando la prima volta la funzione bib(fstream &file,string s);
mi restituisce in modo esatto il numero di righe,
chiamando successivamente la funzione stampa(), non ricevo nulla sullo schermo.

se inverto l' ordine delle chiamate, prima chiamo stampa() e poi chiamo bib(),
mi stampa esattamente la matrice, ma mi stampa 0 per il numero di righe.

volevo delle delucidazione per questo comportamento penso legato alla funzione getline, che ancora un po' mi sfugge.

vi posto il codice da me utilizzato
  

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>


using namespace std;

void stampa(fstream &file);
int bib(fstream &file,string s);

/*
 * 
 */
int main(int argc, char** argv) {
 char file1[30],file2[30];
 
 string s,s1;

 
    cout<<"inserire il nome del primo testo \n";
    cin.getline(file1, 30);
    cout<<"inserire il nome del secondo file da usare \n";
    cin.getline(file2, 30);
   
    fstream file;
    fstream filex;
    
    
    file.open(file1 ,ios::in);
    filex.open(file2,ios::in);
    
    if(!file)
         cout<<"ERRORE FILE 1 \n";
      
    
    if(!filex)
      cout<<"ERRORE FILE 2\n";
      
    
    cout<<"Righe 1 testo: "<<bib(file,s)<<endl;
    cout<<"Righe 2 testo"<<bib(filex,s1)<<endl;

    stampa(file);
    stampa(filex);
    
return 0;
}


void stampa(fstream &file)
{ string s;
    while (file.good()) {
        getline(file,s,' ');
        cout<<s<<endl;
    }
    
  
}


int bib(fstream &file,string s)
{
     int contarighe=0;
        while(!file.eof()){
                           getline(file,s,'\n');
                           contarighe++;
        }
        return contarighe-1;
}

aaa
22/04/13 8:35
Poggi Marco
Ciao!

La lettura di un file di testo avviene sequenzialmente. Di conseguenza, terminata la funzione bib, il puntatore del file si trova alla fine dello stesso.
Quindi, terminata la finzione di stampa o lettura, bisogna chiudere il file ed eventualmente riaprirlo.
aaa
22/04/13 9:51
gian8
Avevo intuito che potesse essere legato a una problematica di questo tipo, ti ringrazio per l attenzione.
aaa
23/04/13 16:41
Saik
Senza aprire e richiudere il file sprecando piu' risorse del necessario potresti usare la funzione
nomefile.seekg(0,nomefile.beg())

:D
aaa
13/06/13 14:58
gian8
ho letto ora, grazie non conoscevo questa funzione :)
aaa