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
codice:
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;
Per cercare di leggere da file le due strutture ho creato questa funzione
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