[C] esercizio con file e allocazione dinamica di struct in memoria

di il
6 risposte

[C] esercizio con file e allocazione dinamica di struct in memoria

Salve, devo scrivere la seguente funzione per leggere i dati da file:
Si scriva una funzione che legge dal file Prova3Dati.txt (fornito) dei dati relativi a una rilevazione di una centralina per il controllo climatico, da memorizzare in una struct allocata con malloc, il cui puntatore va inserito nell'array Dati, nella posizione corrispondente al codice identificativo della centralina da cui sono ricavati i dati. Se il codice della centralina e' superiore al valore massimo dell'indice dell'array (ad esempio 10 o 25, se l'array e' lungo 10 posizioni (indici da 0 a 9)), o se la posizione corrispondente e' gia' occupata, viene stampato a video un messaggio d'errore con tutti i dati, e questi non vengono inseriti. L'array ha al massimo 10 posizioni.

è ho scritto la seguente funzione ma non so se è giusta:

void leggiFile(char* nomefile,centralina *dati, int a)
{ centralina* centr= malloc(sizeof(centralina));
 int Dati=10;
centralina* cent_n=malloc(Dati*sizeof(centralina));
FILE* file=fopen("Prova 3- Dati.txt", "r");
int i;
for(i=0;i<Dati;i++){
 char TmP[15];
 int res=fscanf(file,"%d %f %f %f %s %d %d %d",&(cent_n[i].cent),&(cent_n[i].temperatura),&(cent_n[i].umidita),&(cent_n[i].polveri_sottili),TmP,&(cent_n[i].giorno),&(cent_n[i].mese),&(cent_n[i].anno));
if(res==EOF)
{
    break;
}
cent_n[i].giornosettimana[0]=ConvertiGiorno(TmP);
  }
free(centr);
free(cent_n);
fclose(file);
}
E questa è la sstruct su cui salvare i dati::

ypedef enum {monday,tuesday,wednesday,thursday,friday,saturday,sunday}tipogiorno;
struct strcentralina{ int cent;
                      float temperatura;
                      float umidita;
                      float polveri_sottili;
                      int giorno;
                      int mese;
                      int anno;
                      tipogiorno giornosettimana;};
typedef struct strcentralina centralina;
l'esercizio poi continua però vorrei sapere se il codice va bene fino a qui,grazie in anticipo:

6 Risposte

  • Re: [C] esercizio con file e allocazione dinamica di struct in memoria

    Non ne ho la minima idea.
    manca proprio il file di testo da caricare
  • Re: [C] esercizio con file e allocazione dinamica di struct in memoria

    Il file di testo ce l'ho io sono solo una serie di dati niente di che
  • Re: [C] esercizio con file e allocazione dinamica di struct in memoria

    Come sono impostati i dati trattati da un programma è molto importante.

    Mostra una decina di righe di questo file di dati.
  • Re: [C] esercizio con file e allocazione dinamica di struct in memoria

    2 21.0 67.2 57.2 24 10 2017 Thursday
    2 21.3 68.2 59.2 25 10 2017 Friday
    1 21.6 69.6 67.2 23 10 2017 Wednesday
    3 22.0 64.3 77.2 24 10 2017 Thursday
    4 21.8 77.2 64.2 21 10 2017 Monday
    9 22.0 67.6 58.2 24 10 2017 Thursday
    3 23.1 77.2 58.3 24 10 2017 Thursday
    6 22.3 87.8 59.6 20 10 2017 Sunday
    5 23.0 65.4 57.6 24 10 2017 Thursday
    8 21.7 68.3 57.6 24 10 2017 Thursday
    6 21.9 69.5 56.2 24 10 2017 Thursday
    2 21.0 71.2 71.3 24 10 2017 Thursday
    sono una serie di numeri e date con la stringa del giorno
  • Re: [C] esercizio con file e allocazione dinamica di struct in memoria

    Appunto ... controlla la sequenza di dati di una riga e quello che leggi nella fscanf ... alla fine della fscanf c'è l'anno ma nella riga l'anno non sta alla fine ..

    Poi,

    1) il parametro "nomefile" e "a" non sono utilizzati

    2) il controllo di EOF è usato a sproposito perché la fscanf non restituisce EOF

    3) liberi la memoria alla fine perdendo tutti i dati ... a che serve?
  • Re: [C] esercizio con file e allocazione dinamica di struct in memoria

    In questo modo andrebbe bene? nella fscanf ho messo tutto in ordine come da file e ieri avevo modificato la parte riguardante l'allcazione di memoria, dovrei aggiungere anche un controllo per stampare a video il contenuto del file in caso di errore
    
    void leggiFile(centralina *dati)
    { centralina* cent_n= malloc(sizeof(centralina));
     centralina * Dati[10]={0};
    FILE* file=fopen("Prova 3- Dati.txt", "r");
    int i;
    if(i<10)
    {
    Dati[i]=cent_n;}
    }
    for(i=0;i<Dati;i++)
     {char tmp[15];
     int res=fscanf(file,"%d %f %f %f %d %d %d %s ",&cent_n[i].cent,&cent_n[i].umidita,&cent_n[i].temperatura,&cent_n[i].polveri_sottili,&cent_n[i].giorno,&cent_n[i].mese,&cent_n[i].anno,tmp);
    
     cent_n[i].giornosettimana=ConvertiGiorno(tmp);}
    fclose(file);
    }
    
Devi accedere o registrarti per scrivere nel forum
6 risposte