PDA

Visualizza la versione completa : [C] lettura stringhe da file


Devour
27-05-2013, 14:19
Ciao a tutti.
Ho un file .txt in cui vi sono scritte delle parole, per esempio "casa ciao tavolo...." e devo leggere tali stringhe per poi elaborarle in un certo modo (non mi soffermo su questo perchè la mia domanda riguarda altro)..
Ho un problema nella lettura del file, che viene passato come argomento al programma.
Il codice che ho scritto è il seguente:



void leggi_file(char *file, struct parola **lhead)
{
printf("leggo_file\n");
char s[20];
int f=0;
while(f!=EOF) //fino a che non raggiungi la fine del file
{
if((f=scanf(file, "%s", s))==1) //in caso di avvenuta lettura
{
printf("controllo\n");
controlla(s,lhead); //controlla la parola
}
printf("fatto\n");
}
}



int main(int argc, char *argv[])
{
if(argc<2)
{
fprintf(stderr, "Usage: %s <file_input>", argv[0]);
return EXIT_FAILURE;
}

struct parola *head= NULL; //puntatore alla cima della lista

//apertura del file dal leggere
if(open(argv[1], O_RDONLY) == -1)
{
fprintf(stderr, "Errore nell'apertura del file %s",argv[1]);
return EXIT_FAILURE;
}

leggi_file(argv[1], &head); //lettura del file

return EXIT_SUCCESS;

}


Non so perchè ma si blocca all'interno del ciclo di lettura, senza arrivare alla printf("controllo\n").

oregon
27-05-2013, 14:34
C'è qualcosa che non va nel tuo codice ...

Tu passi il nome del file alla leggi_file ma in quella funzione non apri il file e alla fscanf non passi il puntatore a FILE ma il puntatore a char ... (anzi è una scanf e non una fscanf ...) ... insomma, molta confusione ...

Rivedi il funzionamento di fopen e fscanf ...

Alex'87
27-05-2013, 14:34
Si blocca perché scanf resta in attesa che scrivi qualcosa sulla tastiera...

La funzione che ti serve è fscanf ;)

Devour
28-05-2013, 19:42
Ho risolto...ecco il codice:



void leggi_file(char *f, struct parola **lhead)
{
FILE *file;
char s[40];

if((file=fopen(f, "r")) == NULL)
{
fprintf(stderr, "Errore nell'apertura del file\n");
exit(EXIT_FAILURE);
}

while(!feof(file))
{
if(fgets(s, 40, file))
printf("ho letto:%s\n", s);
}
}


int main(int argc, char *argv[])
{
if(argc<2)
{
fprintf(stderr, "Usage: %s <file_input>", argv[0]);
return EXIT_FAILURE;
}

struct parola *head= NULL; //puntatore alla cima della lista


leggi_file(argv[1], &head);



return EXIT_SUCCESS;

}

Loading