Lettura Stringhe da file in C

di Anonimizzato32156 il
6 risposte
Più che un problema, mi servirebbe un consiglio su come utilizzare la funzione fgets per leggere stringhe da file di testo in c. Praticamente, il codice in seguito, legge le stringhe correttamente, l'unico problema che o mi ripete l'ultima stringa più di una volta oppure mi mette dello spazio vuoto.
void leggi_stringa(char string [max])
{
    int i=0;
    FILE *fp;
    fp=fopen("input.txt","r");
    if(fp!=NULL)
    {
        while(!feof(fp))
        {
            if(string!=NULL)
            {
                fgets(string,max,fp);
                printf("%s",string);
            }
            i++;
        }
    }
    else
    {
        printf("errore");
    }
    fclose(fp);
}

6 Risposte

  • Prova a scrivere così
    
    void leggi_stringa(char string [max])
    {
        int i=0;
        FILE *fp;
        fp=fopen("input.txt","r");
        if(fp!=NULL)
        {
            fgets(string,max,fp);
            while(!feof(fp))
            {
                i++;
                printf("%s",string);
                fgets(string,max,fp);
            }
        }
        else
        {
            printf("errore");
        }
        fclose(fp);
    }
    
  • Grazie mille per la risposta ma da' comunque lo stesso problema. Il testo contiene le seguenti stringhe:
    "Milano si trova in Lombardia"
    "Marco e Paolo sono fratelli"
    "Napoli e Salerno sono province della Campania"
    Ma allo stesso modo mi legge solo le prime due, tranne l'ultima.
    void leggi_stringa(char string [max])
    {
        int i=0;
        FILE *fp;
        fp=fopen("C:\\Users\\User\\CLionProjects\\prova_esercizio\\input.txt","r");
        if(fp!=NULL)
        {
            fgets(string,max,fp);
            while(!feof(fp))
            {
                i++;
                printf("%s\n",string);
                fgets(string,max,fp);
                }
    
        }
    
        else
        {
            printf("errore");
        }
        fclose(fp);
    }
  • Tutte li linee devono avere un ritorno a capo. Anche la terza.
  • Grazie mille in questo momento, va tutto come deve. Starò più attento su questi particolari!
  • Certo ... e ricorda che dalla feof ottieni un risultato solo DOPO che è avvenuta una lettura, non prima. Quindi la fgets deve precedere sempre la feof, non il contrario.
  • Ah vabbene poichè ho utilizzato sempre questo metodo e quindi ogni qualvolta che il ciclo scandiva il file, in seguito avvenisse la lettura delle stringhe con la funzione fgets. Grazie mille seguirò il consiglio!
Devi accedere o registrarti per scrivere nel forum
6 risposte