Leggere tutti gli elementi di un file

di il
8 risposte

Leggere tutti gli elementi di un file

Salve ragazzi volevo chiedervi come poter leggere, una volta aperto un file in modalità lettura, tutti gli elementi del file uno ad uno.
L'esercizio mi richiede di leggere degli elementi da un file e poi creare una lista con questi ultimi.
Vi innesto la parte di codice riguardante questo pezzo che non riesco a capire...

   void leggi_file(char *nomefile){

    FILE *pf;
    t_list L2;
    int *info;
    
    L2=crea_lista();
    pf=fopen(nomefile, "r");

    if(pf){
    
    fscanf(pf, "%d", info)

    L2=inserisci_info(L2,*info);
    fclose(pf);
}   else  { 
    printf("Errore");
}
    stampa_lista(L2);
}
Così facendo nella lista mette solo il primo elemento, come posso risolvere, che ciclo usare?

8 Risposte

  • Re: Leggere tutti gli elementi di un file

    Devi fare un ciclo testando la fine del file con la funzione feof().
    Attenzione a controllare il valote di ritorno della fscanf() perché se ti ritrovi nel file un carattere non numerico son dolori! Magari posta anche un file di esempio.
  • Re: Leggere tutti gli elementi di un file

    Per leggere un singolo carattere alla volta è meglio fgetc()
    Http://en.cppreference.com/w/c/io/fget
  • Re: Leggere tutti gli elementi di un file

    Mi sapresti fare un esempio di come usare il ciclo con feof()?
  • Re: Leggere tutti gli elementi di un file

    Con fgetc() non c'è bisogno di feof(). Guarda l'esempio, se fgetc() arriva alla fine restituisce EOF e il file è finito.
  • Re: Leggere tutti gli elementi di un file

    Ti ringrazio, te lo chiedo perchè il prof. mi pare che non ammette l'uso di fgetc(). Non ne sono sicuro, controllerò il programma spiegato. Più che altro volevo capire se con fscanf era fattibile senza troppi intoppi
  • Re: Leggere tutti gli elementi di un file

    Ti ho suggerito la fgetc() perché chiedevi come leggere un file elemento per elemento (che, chiedo venia, ho inteso come carattere per carattere). Vedendo meglio devi leggere il file intero per intero. In tal caso devi usare proprio fscanf. Però quell'info è sbagliato (non è allocato, manca spazio)
    http://en.cppreference.com/w/c/io/fscan
    che in caso di fallimento restituisce EOF, ma anche così non è strettamente necessario feof(). Se il prof lo richiede esplicitamente basta poco per mettere le cose a posto. (Codice non testato)
    
      void leggi_file(char *nomefile){
    
        FILE *pf;
        t_list L2;
        int info = 0; // così è corretto
       
        L2=crea_lista();
        pf=fopen(nomefile, "r");
    
        if(pf){
       
        while(fscanf(pf, "%d", &info) != EOF) {
            L2=inserisci_info(L2, info);
        }
    
        fclose(pf);
    }   else  {
        printf("Errore");
    }
        stampa_lista(L2);
    }
    
  • Re: Leggere tutti gli elementi di un file

    Sei un fottuto mostro, ti ringrazio da adesso all'infinito. Buona continuazione di giornata
  • Re: Leggere tutti gli elementi di un file

    Attenzione che se nel file ti trovi un carattere non numerico la fscanf() ritornerà 0 e resterai inloopato...
    Potresti modificare per restare nel loop finchè fscanf() ritorna 1.
Devi accedere o registrarti per scrivere nel forum
8 risposte