A rieccome, mi avete chiamato vero? 
Ecco come ho pensato di trovare l'ingresso e uscita dell'utente e memorizzarla nella struttura:
codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{
int hh, mm, ss;
int hhI, mmI, ssI;
int hhU, mmU, ssU;
char C;
int user;
}accesso;
void carica_dati(char filename[]){
FILE *f;
char buffer[128];
f = fopen(filename, "r");
if(f==NULL)
{
perror("Errore apertura file");
exit(1);
}
else
{
int z = 0;
while((fgets(buffer, sizeof(buffer), f))!=NULL)
z++;
accesso db[z];
accesso dbIU[z];
int d, G;
for(d=0; d<z; d++) {
sscanf(buffer, "%d:%d:%d %c %d", &db[d].hh, &db[d].mm, &db[d].ss, &db[d].C, &db[d].user);
for(d=0; d<z; d++) {
G=0;
while(db[d].user!=db[G].user)
G++;
if(db[G].C=='U'){
dbIU[d].hhI = db[d].hh;
dbIU[d].mmI = db[d].mm;
dbIU[d].ssI = db[d].ss;
dbIU[d].hhU = db[G].hh;
dbIU[d].mmU = db[G].mm;
dbIU[d].ssU = db[G].ss;
dbIU[d].user = db[d].user;
}
else
{
dbIU[d].hhI = db[G].hh;
dbIU[d].mmI = db[G].mm;
dbIU[d].ssI = db[G].ss;
dbIU[d].hhU = db[d].hh;
dbIU[d].mmU = db[d].mm;
dbIU[d].ssU = db[d].ss;
dbIU[d].user = db[d].user;
}
/* printf("%d:%d:%d %c %d\n", db[d].hh, db[d].mm, db[d].ss, db[d].C, db[d].user); */
}
for(G=0; G<z; G++)
printf("I%d:%d:%dU%d%d%d %d\n", dbIU[G].hhI, dbIU[G].mmI, dbIU[G].ssI, dbIU[G].hhU, dbIU[G].mmU, dbIU[G].ssU, dbIU[G].user);
fclose(f);
}
}
}
int main(int argc, char *argv[])
{
carica_dati(argv[1]);
return 0;
}
A quanto pare alla compilazione il computer non è esploso e non mi ha dato errori, però eseguendolo la printf spara roba assurda
non passerò mai questo esame