codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct car{
       char *targa;
       char *modello;
       int ingresso;
       int uscita;
       struct car *next;     
};

/*variabili globali*/
const int DIM =30;
struct car *parcheggio;

/*prototipi*/
int posteggio();
int ritiro(char *targa);
struct car *cercaTarga(char *targa); 
struct car *cercaModello(char *modello);
int numAutoPerModelloEtarga(int ingresso);
int letturaOrario(int ora, int minuti);
void printCar(struct car *p);

main(){
       char risp, targa[DIM], modello[DIM];
       struct car *p;
while(risp!='q'){
       printf("cosa si desidera fare\n");
       printf("selezionare 'p' per posteggio\n");
       printf("selezionare 'r' per ritiro auto\n");
       printf("selezionare 't' per ricerca targa\n");
       printf("selezionare 'n' per numero macchine di un certo modello in un dato intervallo");
       printf("inserire il codice: ");
       scanf("%c", &risp);
       fflush(stdin);
       switch(risp){
                    case 'p': if(posteggio())
                                   printf("operazione riuscita\n");
                              else 
                                   printf("operazione non riuscita\n");
                               break;
                    case 'r': printf("inserire targa auto da ritirare\n");
                              fgets(targa, sizeof(targa),stdin);
                              if(ritiro(targa)){
                                                printf("rimozione auto effettuata con successo\n");
                              }
                              else 
                                   printf("operazione non riuscita\n");
                              break;
                    case 't': printf("inserire targa da ricercare");
                              fgets(targa, sizeof(targa), stdin);
                              p=cercaTarga(targa);
                              if(p){
                                             printCar(p);
                              }
                              else{
                                   printf("auto non presente\n");
                              }        
                    case 'n': printf("inserisci modello: ");
                              fgets(modello, sizeof(modello), stdin);
                    case 'q': break;
                    default: printf("comando non riconosciuto\n");
       }
    }
}
/*parcheggio: inserisce un auto nel posteggio;
              1)verifica se vi è spazio per poter ospitare nuove auto;
              2)segnala se l'auto è già presente negli archivi
              3)verifica la consecutio temporum del posteggio
                      */
int posteggio(void){
    int i=0; /*tentativi*/
    int tempoU;
    struct car *a, *cur;
    char targa[DIM], modello[DIM];
    int ora, minuti;
    
    a=malloc(sizeof(struct car));
    if (a == NULL){
       printf("il posteggio è pieno; non è possibile ospitare altre auto\n");
       return 0;
    }
    printf("inserisci targa: ");
    fgets(targa, sizeof(targa), stdin);
    a->targa=malloc((strlen(targa)+1)*sizeof(char));
    strcpy(a->targa,targa);
    
    /*verifico la presenza dell'auto*/
    for (cur=parcheggio; cur!=NULL && strcmp(cur->targa,targa)!=0; cur=cur->next)
        ;
    if(cur!= NULL && strcmp(cur->targa,targa)==0){
           printf("auto già presente nel posteggio\n");
           return 0;    
    }
    /*proseguo con l'ottenimento dati*/
    printf("inserisci modello: ");
    fgets(modello, sizeof(modello), stdin);
    a->modello=malloc((strlen(modello)+1)*sizeof(char));
    strcpy(a->modello, modello);
    printf("inserisci ora e minuti ingresso hh:mm: ");
    scanf("%d:%d",&ora, &minuti);
    fflush(stdin);
    a->ingresso=letturaOrario(ora, minuti);
    printf("inserisci ora e minuti uscita hh:mm: " );
    scanf("%d:%d", &ora, &minuti);
    fflush(stdin);
    tempoU = letturaOrario(ora, minuti);
    while (i<2 && tempoU < a->ingresso){
          printf("orario d'uscita precedente a quello d'ingresso; reimmetti\n");
          scanf("%d:%d", &ora, &minuti);
          fflush(stdin);
          tempoU = letturaOrario(ora, minuti);
          i++;
    }
    if(i >= 2){
             printf("tentativi di immissione esauriti; abbandono posteggio\n");
             return 0;
    }
    a->uscita = tempoU;
    a->next = parcheggio;
    parcheggio=a;
    return 1;
}
  

/*converto i minuti e l'ora in secondi dalla mezzanotte*/
int letturaOrario(int ora, int minuti){
     int tempo;
     tempo=minuti+ora*60;
     return tempo;
}
int ritiro(char *targa){
     struct car *c, *prev, *cur;
     if (parcheggio==NULL)
        return 0;
     for(cur=parcheggio, prev=NULL; cur!=NULL && strcmp(cur->targa, targa)!=0; 
                         cur=cur->next)
                         ;
     if(cur!=NULL && strcmp(cur->targa, targa)==0){
                  if (prev==NULL)
                     parcheggio=parcheggio->next;
                  else{
                      prev->next=cur->next;
                      free(cur);
                  }
                  return 1;
     }
     else {
          printf("auto non trovata\n");
          return 0;
     }    
}
struct car *cercaTarga(char *targa){
    struct car *p;
    
    for (p=parcheggio; p!=NULL && strcmp(p->targa,targa)!=0; p=p->next )
                       ;
                       
                return p;
}
struct car *cercaModello(char *modello){
       struct car *p;
       
       for (p=parcheggio; p!=NULL && strcmp(p->modello,modello)!=0; p=p->next)
           ;
       return p;
}
/*restituisce la prima auto che rientra nell'intervallo indicato*/
struct car *cercaIntervallo(){
       int h,m, t1, t2;
       struct car *p;
       printf("inserisci primo orario: hh:mm");
       scanf("%d:%d",&h,&m);
       t1=letturaOrario(h,m);
       printf("inserisci secondo orario: hh:mm");/*successivamente è possibile aggiungere controllo*/
       scanf("%d:%d",&h,&m);
       t2=letturaOrario(h,m);
       
       for (p=parcheggio; p!=NULL && p->ingresso < t1 &&p->uscita > t2;
           p=p->next)
           ;
           
           return p;
}
/*stampa i membri di una singola macchina*/
void printCar(struct car *p){
     printf("targa: %s\n",p->targa);
     printf("modello: %s\n",p->modello);
     printf("orario ingresso: %d:%d\n", (p->ingresso)/60, p->ingresso%60);
     printf("orario uscita: %d:%d\n", (p->uscita)/60, p->uscita%60);
}
il mio problema deriva dalla realizzazione della ricerca sia del modello, sia della fascia oraria; la funzione dovrebbe restituire un numero di auto che rientrano in tali range, ossia quelle che appartengono sia al modello, sia alla fascia oraria di parcheggio presa in considerazione.
Singolarmente, per entrambi i casi ho realizzato una ricerca singola che restituisce un puntatore al primo elemento che non soddisfa il ciclo while: cosa occorre cambiare per salvare più risultati di ricerca? Dovrei ricorrere ad un array di puntatori per ospitare diversi elementi della lista?