Salve ho il seguente programma che gestisce il parco auto di un autonoleggio,nell'inserire la prima auto è tutto ok,ma nell'inserimento della seconda auto con un numero di targa diverso,la funzione list search fa qualcosa di strano,insomma il risultato è che anche se la seconda auto ha una targa diversa mi viene stampato il messaggio :Impossibile inserire l'auto,perche' c'e' gia' un auto con la stessa targa....
qualcuno può darmi una mano...ci sho sbattuto la testa tutto il giorno..grazie mille anticipatamente..


codice:
  #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<stdbool.h>
struct SKey{
   char targa[11];
};   
typedef struct SKey TKey;
struct SSat {
   char marca[16];
   char modello[16];
   int  km;
   bool disponibile;
};
typedef struct SSat TSat;
struct SInfo{
      TKey key;
      TSat satellite;
};
typedef struct SInfo TInfo;
struct SNode {
 TInfo info;
 struct SNode *link;
};
typedef struct SNode TNode;
typedef TNode* TList;
bool greater (TKey key1, TKey key2);
bool lower (TKey key1, TKey key2);
bool equal (TKey key1, TKey key2);
void print_key (TKey key);
void print_satellite (TSat sat);
void print_info (TInfo info);
TKey read_key ();
TSat read_satellite ();
TInfo read_info ();
 
 
int menu();
bool inserisci_auto(TList *list, TInfo info);
int elimina_auto_vecchie(TList *list, int km);
void visualizza_auto_disponibili(TList list);
bool noleggia_auto(TList list, TKey key);
bool restituisci_auto(TList list, TKey key, int km_percorsi);
/*PROTOTIPI FUNZIONI SULLE LISTE*/
TList list_create();
TNode*list_search(TList list,TKey key);
/**************************/
TInfo leggi_info();
 
main()
{
      int scelta;
      TList list;
      TInfo info;
      /* Inizializzo la lista */
      list = list_create();
      /* Scelta della funzione per gestire la rubrica */
      while(scelta=menu()){
         switch(scelta){
            
            case 1:    system("CLS");
                       printf("\n--------------------\n");
                       printf("\nInserimento nuova auto\n");
                       printf("\n--------------------\n\n");
                       info=read_info();
                       
                       if(inserisci_auto(&list,info) == true)
                       printf("L'auto e'stata inserita correttamente nell'elenco\n");
                       else
                       printf("Impossibile inserire l'auto,perche' c'e' gia' un auto con la stessa targa\n");
                       
                       system("pause");                                       
                       break;             
           
            
            case 2:    system("CLS");
                       printf("\n---------------------------------\n");
                       printf("\nEliminazione auto vecchie\n");
                       printf("\n---------------------------------\n\n");            
                       /* da completare */
                       system("PAUSE");
                       break;             
            
            case 3:    system("CLS");
                       printf("\n-------------------------------------\n");
                       printf("\nVisualizza auto disponibili\n");
                       printf("\n-------------------------------------\n");
                       /* da completare */
                       system("PAUSE");
                       break;             
           
            case 4:    system("CLS");
                       printf("\n-------------------------------------\n");
                       printf("\nNoleggio auto\n");
                       printf("\n-------------------------------------\n");
                       /* da completare */
                       system("PAUSE");
                       break;             
            
            case 5:    system("CLS");
                       printf("\n-------------------------------------\n");
                       printf("\nRestituzione auto\n");
                       printf("\n-------------------------------------\n");
                       /* da completare */
                       system("PAUSE");
                       break;             
          }
      }
      system("PAUSE");  
}   

int menu()
{
    int scelta;
    
    system("CLS");
    printf("-------------------------------------------------\n");
    printf("PROGRAMMA PER LA GESTIONE DI UN AUTONOLEGGIO\n\n");
    printf("1. Inserimento nuova auto\n");
    printf("2. Eliminazione auto vecchie\n");
    printf("3. Visualizza auto disponibili\n");
    printf("4. Noleggio auto\n");
    printf("5. Restituzione auto\n");
    printf("0. EXIT\n\n");
    printf("-------------------------------------------------\n");
    printf("Selezionare la scelta [0-5]: ");
    scanf("%d", &scelta);
    while((scelta<0)||(scelta>5)){
       printf("ERRORE! valore non consentito\n");                        
       printf("Selezionare la scelta [0-5]: ");
       scanf("%d", &scelta);
    }
    return scelta;
   system("PAUSE");
}

/*FUNZIONI SULLE LISTE*/
  TList list_create(){
      return NULL;
                  }
 
  TList list_insert (TList list, TInfo info){
  TList prec, curr, new_node;
  prec=NULL;
  curr=list;
  /* F1: ricerca della posizione di inserimento */
  while  ((curr!=NULL) && (greater(info.key, curr->info.key)==true) ){
    prec=curr;
    curr=curr->link;
  }
  /* F2: allocazione del nuovo nodo */
  new_node=(TNode *) malloc (sizeof(TNode));
  if (new_node==NULL)
  {
    printf("Non e’ possibile allocare l’elemento\n");
    exit(1);
  }
  new_node->info=info;
  /* F3: aggiornamento della catena dei collegamenti */
  if (prec==NULL)
  {
    /* C1: inserimento in Testa */
    new_node->link=list;
    list=new_node;
    return list;
  }
  else {
    /* C2: inserimento in posizione centrale o in coda */
    prec->link=new_node; 
    new_node->link=curr;
    return list;
  }
}
      
 

TNode*list_search(TList list,TKey key){/*viene passata attraverso TKey key la targa?*/
  TNode *curr;
  curr=list;
  while((curr!=NULL) && (greater(key, curr->info.key)== true) )/*a detta della traccia questo confronto viene fatto tra le targhe*/
  /*printf("siamo all'interno della funzione list_search il valore di key e'%d\n\n\n",key);*/
  /*printf("siamo all'interno della funzione list_search il valore di curr->info.key e'%d",curr->info.key);*/
  {
    curr=curr->link;
  }
  /* Analisi delle post - condizioni
  C1: valore da cercare piu’
      piccolo della Testa :      curr != NULL
  C2: valore da cercare maggiore
      della Coda :        curr != NULL
  C3: valore da cercare compreso tra
      quello di Testa e quello di Coda :   curr->info>=info
  */
  if ((curr!=NULL) && (equal(curr->info.key, key)==true) )
  /* Elemento trovato */
     return curr;
  else
     return NULL;
}
           
           
      
/*FUNZIONI BOOLEANE*/
bool greater (TKey key1, TKey key2)
{
   if (strcmp(key1.targa, key2.targa)>0)
      return true;
   else
      return false;
}
bool lower (TKey key1, TKey key2)
{
   if (strcmp(key1.targa, key2.targa)<0)
      return true;
   else
      return false;
}
bool equal(TKey key1, TKey key2)
{
   if (strcmp(key1.targa, key2.targa)==0)
      return true;
   else 
      return false;
}
 

/*FUNZIONI PER INFO E SATELLITE*/
TKey read_key(){
     
     TKey key;
     printf("Inserisci la targa: ");
     scanf("%s",key.targa);
     return key;
               }
TSat read_satellite(){
     TSat sat;
     printf("Inserisci la marca: ");
     scanf("%s",sat.marca);
     printf("Inserisci il modello: ");
     scanf("%s",sat.modello);
     sat.km=0;
     sat.disponibile=true;
     return sat;
                       }
                         
TInfo read_info()
{
      TInfo info;
      TKey key;
      
      key=read_key();
      info.satellite=read_satellite();
}

/*FUNZIONI SPECIFICHE RICHIESTE DALLA TRACCIA*/
      
bool inserisci_auto(TList *list, TInfo info){
     
     TNode*node;
     
     node=list_search(*list,info.key); 
     if(node==NULL)
     {
    *list=list_insert(*list,info);
     return true;
     }
     else
     return false;
     
     
     
     
     
                      
    
}