Lista.

di il
23 risposte

Lista.

La questione è molto semplice , una volta inseriti tutti i nominativi , il programma mi permette di effettuare una ricerca tra i nomi inseriti.
Se la ricerca va a buon fine io posso scegliere se eliminare o meno il record, fin qui tutto ok .
Il problema nasce dal fatto che se il record non viene trovato nella lista mi dice lo stesso se io voglio eliminare o meno il record(ma il record non c'è!!!!)
Come posso risolvere tale ambiguità ?

Praticamente dovrei creare una condizione sulla variabile trial , ma questa è un char e non posso fare come se fosse di tipo int.

printf("\n\nInserire dati per la ricerca: ");
scanf("%s",trial);

Search_in_list(head,trial);}
printf("\nVuoi eliminare il record? 1=si,0=no");
scanf("%d",&scelta_2);
if(scelta_2==0){
printf("\n\nnessuna eliminazione\n\n");

print_list(head);}
else {
printf("\n Cancello il record trovato:\n\n");

head = delete_record(head, trial);
print_list(head);}

Save_to_file(head,FILENAME);
printf("Indice: \n\n");
print_list(head);
system("pause");
return 0;
}

23 Risposte

  • Re: Lista.

    La Search_in_list() dovrebbe dirti se ha trovato oppure non ha trovato il record; altrimenti, che ricerca è?
  • Re: Lista.

    Mi spiego meglio , la search in list mi dice se l'elemento viene trovato o meno .

    La questione è che sia se viene trovato sia che non viene trovato , il programma procede chiedendomi se voglio eliminare il record?
    Invece io vorrei trovare un modo , nel caso in cui non sia stato trovato nessun record , di uscire completamente dalle istruzioni successive.
    Mi sono spiegato?
  • Re: Lista.

    daniele90 ha scritto:


    Mi spiego meglio , la search in list mi dice se l'elemento viene trovato o meno .
    Come ti dice che l'elemento è stato trovato o no?
  • Re: Lista.

    Si mi dice se l'elemento è stato trovato o meno , ma in tutti e due i casi continua a compilare ugualmente chiedendomi se voglio eliminare il record.
  • Re: Lista.

    Non mi hai capito.

    Come te lo dice che non l'ha trovato?

    Una funzione restituisce un valore per indicare che è successo qualcosa. La tua funzione non restituisce alcun valore quindi non puoi sapere subito dopo averla chiamata cosa è successo.

    La richiesta successiva, come del resto hai scritto tu, non è sottoposta a nessuna if quindi viene sempre eseguita. Ci siamo capiti? Per maggiore chiarezza, la linea

    printf("\nVuoi eliminare il record? 1=si,0=no");

    e seguenti non sono sottoposte a nessuna if, quindi viene comunque eseguita.
  • Re: Lista.

    Inserire i dati per la ricerca : Li inserisco.

    ricerca elementi il lista.....
    Elemento non trovato!!

    Elementi non trovato!! ( lo ripete due volte perchè il lista ci sono due elementi)

    Vuoi effettuare eliminare il record? 1=si , 0=no.

    io vorrei appunto creare una condizione di if per scegliere se proseguire o meno, il mio dubbio è proprio quello.
  • Re: Lista.

    Vedi perché dico che dovresti rivedere le basi ... così non possiamo intenderci.

    Non basta che la funzione visualizza una frase a video.

    La funzione di ricerca deve restituire un valore

    per capire come procedere dopo.
    Ma la tua funzione non ne restituisce.
    Come la fai la if se la ricerca non restituisce un valore al main?

    Fra l'altro non hai neanche mostrato il codice di questa funzione.
  • Re: Lista.

    Come si fa a creare una condizione su elemnti di tipo char??
    Una cosa simile a if(trial!=0)??
  • Re: Lista.

    Ma cosa c'entra?

    trial è la stringa da cercare, non il risultato.

    Scusa, vuoi mostrare il codice della funzione?
  • Re: Lista.

    Int Search_in_list(bib_p head,char trial[])
    {
    printf("\n\nRicerca elementi in lista...\n");
    if(head==NULL)
    {
    printf("\nImpossibile individuare il percorso specificato\n");
    return -1;
    }

    while(head!=NULL)
    {
    if(strcmp(head->title,trial)==0||strcmp(head->author,trial)==0||strcmp(head->coll,trial)==0)
    {
    printf("\n\nElemento trovato!!\n");
    return 1;
    }
    else
    printf("Elemento non trovato!!\n\n");

    head=head->next;

    }


    return 0;
    }
  • Re: Lista.

    Quindi, dopo un bel numero di post e un po' di insistenza, si capisce che la funzione restituisce

    1 se la stringa è stata trovata
    0 se la stringa non è stata trovata
    -1 se la lista era vuota

    Le tre printf non hanno senso e vanno eliminate (la prima, con il "percorso non trovato" non c'entra nulla perché non c'è nessun percorso da trovare, semmai è la lista ad essere vuota - quella con "elemento non trovato" non va nel ciclo perché se gli elementi sono 1000 potrebbe essere visualizzata 1000 volte ...).

    A questo punto (l'hai scritta tu la funzione o l'hai copiata così come la vedo a parte le 3 printf?) dovrai usare una variabile intera nel main a cui assegnerai il risultato della funzione. Con quella variabile potrai usare la if confrontandola con 1 (stringa trovata) in modo da eseguire il resto.
  • Re: Lista.

    Le funzioni mi sono state insegnate , volevo solo agire all'interno del mai per una maggiore completezza.
  • Re: Lista.

    Non ho capito il senso della tua risposta.
  • Re: Lista.

    Allora senza modificare il main , ma agendo solo sulla funzione come posso modificarla affinchè nel caso non venga trovato nessun dato di ricerca non mi venga chiesto se eliminare il record o meno?
Devi accedere o registrarti per scrivere nel forum
23 risposte