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; }

Rispondi quotando