Lettura di una riga da un file

di Anonimizzato30721 il
3 risposte
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

  • 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
  • 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;
    }
    
    
  • 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