Lettura file

di il
1 risposte

Lettura file

Buongiorno,
sto provando a leggere questo file :
9
RUBINO SMERALDO TOPAZIO
LIMONE JOLLY LIMONE
JOLLY JOLLY JOLLY
RUBINO DOLLARI ANANAS
TOPAZIO SMERALDO ANANAS
RUBINO CILIEGIE TOPAZIO
JOLLY JOLLY JOLLY
JOLLY ANANAS LAMPONI
JOLLY JOLLY CILIEGIE

Ho scritto questo codice,aiutandomi con la soluzione (che non va) e il manuale, ma non funziona:
#include <stdio.h>

#define Max 40

struct {
char rullo[3][Max];
} riga;

void leggi(FILE *inputFile);

int main(int argc, char **argv){

if (argc<2) {
puts("Errore Input \n");
return 1;
}

FILE *fp=fopen(argv[1],"r");
leggi(fp);
fclose(fp);

return 0;
}

void leggi(FILE *inputFile){
int i=0; // contatore
int dim;
char buffer[Max];
riga *giocate;

fgets(buffer,Max,inputFile);
sscanf(buffer,"%d", &dim);
giocate=(riga*)malloc(dim*sizeof(riga));


for (i=0, i<dim, i++){
fgets(buffer,Max,inputFile);
sscanf(buffer,"%s %s %s", giocate.rullo[0], giocate.rullo[1], giocate.rullo[2]);

};

stampa_giocate(giocate,dim);
}

void stampa_giocate(riga *giocate, int dim){
int i;
for(i=0; i<dim; i++){
printf(buffer,"%s %s %s \n", giocate.rullo[0], giocate.rullo[1], giocate.rullo[2]);
}

}

In particolare, la prima riga dovrebbe essere letta e salvata a parte.
char rullo[3][Max]; Nella soluzione c'è messo che [3] indica le colonne, è corretto? Non dovrebbero essere le righe?
Grazie a chiunque mi risponderà.

1 Risposte

  • Re: Lettura file

    Ti sono "scappati" dei dettagli, tipo virgole al posto di qualche punto e virgola, il non avere incluso <stdlib.h> (per malloc()), avere dichiarato struct {...} riga; anziché struct riga{...};, il non riprendere la parola chiave struct quando usi il tipo struct riga, il non aver specificato il prototipo di stampa_giocate() e aver effettuato una chiamata a printf() con parametri sballati in stampa_giocate()...
    #include <stdio.h>
    #include <stdlib.h>
    
    #define Max 40
    
    struct riga {
        char rullo[3][Max];
    };
    
    void leggi( FILE *inputFile );
    void stampa_giocate( struct riga *giocate, int dim );
    
    int main( int argc, char **argv ) {
    
        if( argc<2 ) {
            puts( "Errore Input \n" );
            return 1;
        }
        
        FILE *fp = fopen( argv[1], "r" );
        
        if( NULL == fp ) {
            puts( "Errore apertura file \n" );
            return 1;
        }
    
        leggi(fp);
        fclose(fp);
    
        return 0;
    }
    
    void leggi( FILE *inputFile ) {
        int i=0; // contatore
        int dim;
        char buffer[Max];
        struct riga *giocate;
    
        fgets( buffer, Max, inputFile );
        sscanf( buffer, "%d", &dim);
    
        giocate = (struct riga*) malloc( dim*sizeof(struct riga) );
    
        for (i=0; i<dim; i++) {
            fgets( buffer, Max, inputFile );
            sscanf( buffer,"%s %s %s",
                    giocate[i].rullo[0], giocate[i].rullo[1], giocate[i].rullo[2] );
        };
    
        stampa_giocate( giocate, dim );
    }
    
    void stampa_giocate( struct riga *giocate, int dim ) {
        int i;
    
        for( i=0; i<dim; i++ ) {
            printf( "%s %s %s \n",
                    giocate[i].rullo[0], giocate[i].rullo[1], giocate[i].rullo[2] );
        }
    }
    
Devi accedere o registrarti per scrivere nel forum
1 risposte