Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] Salvare linee file (fscanf)

    Ciao a tutti,
    ho bisogno di leggere tutte le linee presenti in un file txt e di salvarle in una array di char in modo da manipolarli in quasiasi modo:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
     FILE *fp;
     char *Lista;
     int i,cont=0;
     
     
     
     if((fp=fopen("elenco.txt","r"))!=NULL)
     {//inizia a leggere il file
     
    
    
      while(!feof(fp))
      {    
       Lista=(char *)malloc(sizeof(char));        
       fscanf(fp, "%s", Lista); 
       cont++; 
      }   
    }                                                                   
    
     fclose(fp);
     
     for(i=0;i<cont;i++)
         printf("%s\n", Lista);
       
        
     
     printf("%d",cont);
     
     getchar();
     getchar();
     
          
    }
    Però se vado a stampare attraverso il ciclo For.. mi stampa sempre l'ultima linea presente nel file..

    Come posso risolvere?

  2. #2
    La variabile Lista che usi è un puntatore ad un char, quindi una stringa semplice, non un array. Dovresti usare un array di puntatori per memorizzare tutte le stringhe, oppure un array a due dimensioni fisse.
    Come è scritto lì direi che ogni volta la variabile Lista viene sovrascritta dalla riga nuova, e quindi alla fine ti ci ritrovi dentro solo l'ultima riga. Tieni presente però che non ho provato a compilarlo, e che potrei anche sbagliarmi.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  3. #3
    Leggi questo post credo ti possa essere di aiuto.

    [OT]
    Complimenti GreyFox86 molto interessante il tuo sito.
    [/OT]
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  4. #4
    Grazie mille sono riuscito finalmente a capire come si fa!

  5. #5
    Di nulla


    [OT]
    Grazie Samuele, ma quel sito sta per essere sostituito da uno scritto meglio secondo il W3C e con una grafica più dencente
    [/OT]
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  6. #6
    Ecco come ho modificato il codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <io.h>	
    #include <fcntl.h>
    #include <conio.h>
    #include <time.h>
    #include <math.h>
    
    
    int main(void)
    {
     char *buffer = NULL;
     char **blocchi = NULL;
     int in,out, nBlocchi=0, i, j, nRead;
     int DIMBLOCCO = 64+1; // Un char in più per il terminatore di stringa
     int numero;
     
    
      if((in=open("elenco.txt", O_RDONLY))>=0)
     {//inizia a leggere il file
     
     buffer  = (char *) malloc(DIMBLOCCO); 
     blocchi = (char **)malloc(DIMBLOCCO); 
     
     while( (nRead = read(in, buffer, DIMBLOCCO)) > 0  ) 
    	{
    		buffer[ nRead ] = '\0'; // Inserisco terminatore di stringa
    		nRead++; // La lunghezza è cresciuta +1 !
    		blocchi[nBlocchi] = (char *) malloc(nRead);
    		strncpy( blocchi[nBlocchi], buffer, nRead);
    		nBlocchi++;
    	} 
    	
      printf("\n\nMostro stringhe\n\n");
    	for(i=0; i<nBlocchi; i++) 
        	printf("%s\n", blocchi[i]); 
        	
     close(in);
    }   
    
     printf("%d", nBlocchi);
        	 
    
     getchar();
     getchar();    
    }
    Perchè se vado a stampare il numero di blocchi... mi stampa 1???
    Sto usando dev-c++ su winxp... è un problema del compilatore?

  7. #7
    Praticamente questo codice mi serve per fare il seguente programma:

    - Ho un file txt contenente un elenco di nomi, separati dal \n ovvero l'invio.. io devo lanciando questo programma mischiare l'elenco dei nomi, in modo casuale, e in modo che i nomi nn si ripetano..

    Non ho ancora implementato la parte del random.. anche se anche quella mi sta dando problemi..

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 © 2024 vBulletin Solutions, Inc. All rights reserved.