Salve, ho creato una funzione che legge da file una tabella 240*4 e memorizzare i dati in due diverse strutture a seconda se l'elemento nell'ultima colonna è uguale a 1 o 0
I dati sono strutturati nel seguente modo
mat o m i/o Mat=matricola o=ora m=minuti i/o=ingresso o uscita
10097 17 42 0
10097 07 32 1
12406 07 35 1
20941 07 54 1
10097 12 45 0
20941 12 57 0
10097 13 04 1
12406 13 10 0
la seguente matrice è stata copiata e incollata 30 volte su un file chiamato turni.txt per simulare le entrate e uscite da una fabbrica di un mese lavorativo per 3 operai.
Al fine di calcolare le ore lavorative mensili di ogni operaio devo memorizzare le stringhe terminanti con 0 in una struttura operai entrata, e quelle terminanti con 1 in operai uscita
così dichiarata
Per cercare di leggere da file le due strutture ho creato questa funzionecodice:typedef struct{ int mat; //matricola operaio int ore; //ora timbro int minuti; //minuti timbro int flag; //flag 1 per ingresso fabbrica flag 0 per uscita fabbrica }operai;
codice:#include <stdio.h> #include <stdlib.h> #include "operai.h" void leggi_file(operai *entrata, operai *uscita) { FILE *leggi; int i=0; int j=0; int flag; if((leggi=fopen("turni.txt", "r"))==NULL) printf("impossbile aprire il file turni.txt\n"); /*fscanf(leggi, "%d", &entrata[i].mat); fscanf(leggi, "%d", &entrata[i].ore); fscanf(leggi, "%d", &entrata[i].minuti); printf("dimensione bit %d", ftell(leggi));*/ //ftell ritorna 11 while(!feof(leggi)){ fseek(leggi, 11, SEEK_CUR); //posizione il puntatore file prima del 4 elemento della riga fscanf(leggi, "%d", &flag ); //memorizza 4 elemento in flag if(flag==1){ /*se flag==1 fseek(leggi, -11, SEEK_CUR); ritorna dalla posizione corrente 11 bit indietro e leggi fscanf(leggi, "%d", &entrata[i].mat); da inizio riga. */ fscanf(leggi, "%d", &entrata[i].ore); fscanf(leggi, "%d", &entrata[i].minuti); fscanf(leggi, "%d", &entrata[i].flag); i++; }else if(flag==0){ fseek(leggi, -11, SEEK_CUR); fscanf(leggi, "%d", &uscita[j].mat); fscanf(leggi, "%d", &uscita[j].ore); fscanf(leggi, "%d", &uscita[j].minuti); fscanf(leggi, "%d", &uscita[j].flag); j++; } } fclose(leggi); }
Il problema è che se provo a stampare a schermo le strutture ho risultati davvero bizzari, e non riesco a capire il motivo per il quale non riesco a memorizzare correttamente i dati del file all'interno della struttura

Rispondi quotando
