Sto cercando di capire leggendo da questo programma:
codice:
#include <stdio.h>
#include <stdlib.h>


/*
  Realizzare un programma capace di leggere un file di testo relativo
  ai dati di accesso ad un computer da parte di alcuni utenti (log file),
  e di realizzare delle statistiche.

  Il file contiene i dati di accesso nella forma:

  nomeUtente:Cognome:Nome: directory:dataDiAccesso:durataInSecondi

  e contiene una riga per ogni accesso dell' utente (quindi piu' righe per ogni
  utente, non ordinate in alcun modo). Il campo nomeUtente ha al piu' 20 caratteri

  Il computer puo' avere non piu' di 10 utenti, ma alcuni di questi
  non sono mai stati usati e quindi non ci sono righe nel file di log.

  Il programma deve  presentare i dati di avvesso di ogni singolo utente attivo
  (cioe' per cui si e' trovato almeno un accesso) visualizzando in un grafico
  la durata media e massima  dei collegamenti.

*/

#include "dichiarazioni.h"
#define MAXLINE 1000
int getline(char s[], int lim, FILE *f);

int main(int argc, char *argv[])
{
      FILE *fin;
      char line[MAXLINE];
      char segment[MAXLINE];

      struct linea t;

      int i;



      /* inizializza la struttura a disposizione */
      init();

      fin = fopen(argv[1], "r");



      while ( getline(line, MAXLINE, fin) >0 ) {

      caricaStringa( line);
      }



      /*esegue i calcoli sulla struttura */
      calcola();


      for(i=0;  i < NUMUTENTI; i++) {
         t=getInfo(i);
         if (t.numAccessi>0)
            printf("utente %s: tmax=%d, tmedio=%d, num Accessi %d\n", t.nomeUtente, t.tmax, t.tmedio, t.numAccessi);

         }



      return 0;
}






/*---------------------------------------------------------------------------*/
int getline(char s[], int lim, FILE *f) {
    int c, i;

    for (i=0; i<lim-1 && (c=getc(f)) != EOF && c != '\n'; i++)  s[i]=c;
    if (c=='\n') {
       s[i]=c;
       ++i;
    }

    s[i]='\0';
    return i;

}

 
#include <stdio.h>
#include "dichiarazioni.h"

/*
  Funzioni di supporto al programma
*/

/*------------------------------------------------------*/
  /* copia una stringa in un'altra */
 void strcp(char *s, char *t)
 {
    while(*s++ = *t++);
 }



/*------------------------------------------------------*/
/* verifica se due stringhe sono uguali */
int uguali(char *s, char *t)  {

    int i;
    for (i=0; s[i]==t[i]; i++) ;
    i--;
    if  ( (s[i]=='\0' ) && (t[i] == '\0') )  return 1;

    return 0;

 }

 
#include <stdio.h>
#include "dichiarazioni.h"

/*
  Gestione del vettore di strutture
*/

struct linea r[NUMUTENTI];


/*----------------------------------------------*/
/*
  inizializza la struttura
  */

void init(){
 int i;
 for(i=0; i < NUMUTENTI; i++){
    strcp(r[i].nomeUtente, "-");
    r[i].tempo=-1;
    r[i].tmedio=-1;
    r[i].tmax=-1;
    r[i].numAccessi=0;
 }
}

/* -------------------------------------------------------------------- */
/*
   Carica la struttura usando la stringa passata
*/
 void caricaStringa(char *stringa)
 {

 char utente[DIMCAMPO];
 char d[DIMCAMPO];
 int tempo;
 char segmento;
 int c=0;

 sscanf(stringa, "%s %s %s %s %s %d", utente, d, d, d, d, &tempo);



 carica(utente, tempo);

 }

/* -------------------------------------------------------------------- */
/*
   Carica la struttura con i parametri passati
*/

void carica (char *utente, int secondi)
{
   int i;
   int trovato=0;

   for (int i=0; i< NUMUTENTI; i++){
       if (uguali(utente, r[i].nomeUtente)){
            trovato=1;
            r[i].tempo += secondi;
            r[i].tmedio += secondi;
            r[i].numAccessi++;
            if( r[i].tmax < secondi ) r[i].tmax=secondi;
       }

   }



   if (!trovato)  {
      /* trova il posto libero */
      for (i=0; r[i].numAccessi != 0; i++);


      strcp(r[i].nomeUtente, utente);
      r[i].tempo=secondi;
      r[i].tmax=secondi;
      r[i].tmedio=secondi;
      r[i].numAccessi++;
      }

}


/*----------------------------------------------------*/
/*
  Calcola la media ed il massimo
  */

void calcola(){
  int i;
  for(i=0; i < NUMUTENTI; i++)
      if (r[i].numAccessi>0) r[i].tmedio=r[i].tempo/r[i].numAccessi;

}


/* restituisce la struttura */
struct linea getInfo(int i) {return r[i];}
Data questa dichiarazione:
Struct linea r[NUMUTENTI];

che relazione intercorre con questa:

r[i].tempo; ???

Inoltre dà errore su
struct linea t;

....