Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    80

    [C] lettura stringhe da file

    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:

    codice:
     
    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").

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Si blocca perché scanf resta in attesa che scrivi qualcosa sulla tastiera...

    La funzione che ti serve è fscanf
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    80
    Ho risolto...ecco il codice:

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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.