Problema loop e fgets/fscanf

di il
5 risposte

Problema loop e fgets/fscanf

Buonasera a tutti.
Sono uno studente che attualmente sta studiando il C.
Sto facendo un programma che devo consegnare a lezione e sono bloccato su un problema.
Vi spiego a grandi linee il progetto. Ho un file .txt in cui ci sono alcuni carattere che devo scambiare con parole riposte in un altro file(file2). Nell' ultimo file, le parole sono messe sotto forma di elenco.
Ora vi espongo il mio problema. Per essere chiaro vi scrivo il pezzo di codice in cui sono bloccato:
 
            while((fscanf(file2,"%d %s",&numero,parola)!=EOF)
            {
                if(numero==confrontonumero)
                {
                 fprintf(output,"%s",parola);
                }
            }
        }
P.s.: prima di questo ciclo while, ce n'è un altro che però ho omesso.
Ho notato che nell' output viene copiata soltanto la prima parola. Ho fatto qualche esperimento e ho scoperto che ogni qualvolta il puntatore nel file (quello che segna i caratteri) arriva all'EOF, poi non torna più su.
Datemi qualche consiglio con una spiegazione per capire l'errore.
Vi ringrazio anticipatamente del vostro aiuto.

5 Risposte

  • Re: Problema loop e fgets/fscanf

    Scusa, ma non si è capito molto ...

    Mostra il contenuto del file che leggi, quello delle variabili, la loro dichiarazione, dicci cosa succede nel file di destinazione ...
  • Re: Problema loop e fgets/fscanf

    Il file che leggo è un testo normale, mentre il file2 è un elenco. Nel file di destinazione esce la prima parola da tradurre e basta. Le successive rimangono con uno spazio.
    Non chiedermi scusa, anzi dovresti insultarmi per essermi spiegato male.
    Io voglio che il puntatore dentro al file2 torni in cima alla fine di ogni ciclo.
  • Re: Problema loop e fgets/fscanf

    Se ho capito bene, allora devi usare la fseek ... oppure chiudi e riapri il file.
  • Re: Problema loop e fgets/fscanf

    Utilizzando fseek dovrei scrivere: fseek(file2,0,0)?
  • Re: Problema loop e fgets/fscanf

    E' più elegante scrivere

    fseek ( file2 , 0 , SEEK_SET );

    ... comunque, fai prima a provare.
Devi accedere o registrarti per scrivere nel forum
5 risposte