Lettura di una riga da un file

di il
3 risposte

Lettura di una riga da un file

Devo fare un programma che legge una riga dei un file e che deve poi mostrarla a schermo, ma mi da la parola "sbalzata di due", cioè inserendo 2 mi da la quarta parola, ma non ne capisco il perché
#include <stdio.h>

    int main(void)
    {

        FILE * pFile;
        char parola[20];
        int i=0;
        int flag = 1;
        int posizione;
	printf("posizione: \n");
	scanf("%d", &posizione);
        pFile = fopen ("prova.txt" , "r");
        if (pFile == NULL)
            perror ("Error opening file");
        else
        {
            while (!feof (pFile) && flag)
            {
               fgets (parola , 20 , pFile); // Qui legge la riga
               if(i==posizione){
                   if ( fgets (parola , 20 , pFile) != NULL ){ // Legge una riga lunga max 20
                       puts(parola);
                       flag=0;
                    }
                   else
                       puts("Errore");
                }
                i++;
            }
            fclose (pFile);
        }
        return 0;
    }

3 Risposte

  • Re: Lettura di una riga da un file

    La variabile i deve partire da 1 e non da zero.

    E non capisco perché leggi due volte la riga del file, la if della posizione deve essere solo
    
    			if (i == posizione)
    			{
    					puts(parola);
    					flag = 0;
    			}
    
    senza else
  • Re: Lettura di una riga da un file

    Scusate ancora, ma sto apportando alcune modifiche al programma per via delle richieste che mi sono state fatte, e devo chiedere all'utente anche il nome del file da aprire, ma mi da errore anche con il nome corretto qualche idea?
     #include <stdio.h>
    int trovaParola(char parola_output[], int posizione, char nome_file[]){
    
    	FILE *pFile;
    	int x = 1;
    	int i = 1;
    	pFile = fopen ( nome_file, "r"); //apre il file, la "r" sta per read il file non può essere modificato
    
            if (pFile == NULL || pFile ){  //verifica la corretta apertura del file
                printf("Errore Apertura File");
    	}
            else
            {
                while (!feof (pFile) && x)
                {
                   fgets (parola_output, 20 , pFile); // Qui legge la riga
                   if(i==posizione){
                       puts(parola_output); //scrive la parola
    		   x = 0;
    	       }
                    i++;
                }
                fclose (pFile); //chiude il file
            }
    	return 0;
    }
    
    
    int main(void){
            char parola[20];
    	char nome_file[20];
            int i=1;
            int x = 1;
            int posizione;
    	printf("nome file: \n"); //chiede il nome del file d'aprire
    	scanf("%s", nome_file);
    	printf("posizione: \n"); //chiede quale parola 
    	scanf("%d", &posizione);
    	trovaParola(parola, posizione, nome_file);
    	printf("%s", parola);
    	return 0;
    }
    
    
  • Re: Lettura di una riga da un file

    Dovresti dirci quale errore ottieni, un piccolo sforzo che magari ti potrebbe anche svelare la natura del problema.
    Comunque, il tuo controllo su pFile:
    if ( pFile == NULL || pFile )
    cosa fa? Quella espressione è sempre vera, significa: se il file non c'è o c'è ...
    Prova a porre semplicemente:
    if ( pFile == NULL )
    o più elegante:
    if ( !pFile )
    P.S. Osservare sempre i warning del compilatore.
Devi accedere o registrarti per scrivere nel forum
3 risposte