Liste in C

di il
5 risposte

Liste in C

Buongiorno!
Avrei un roblema con la gestione delle liste, o meglio nell'inserimento da file con condizione. Vi scrivo l'esercizio
"creare una lista singolarmente concatenata di elementi "libro" letti da file. inserire nella lista solo i libri il cui <nome> è diverso dalla stringa
"non valido"; voi come agireste?
Grazie

5 Risposte

  • Re: Liste in C

    Mi sembra semplice... Leggi dal file e aggiungi in lista solo se leggi qualcosa di diverso da "non valido" altrimenti passa alla prossima linea del file. Cosa c'è di difficile?
  • Re: Liste in C

    Ho provato in quel modo ma non ci salto fuori mi legge righe a caso... Potresti scrivere un esempio in codice, perchè sono alle prime armi con ste liste e non riesco ancora a visualizzare l'impostazione... giusto per avere un idea.
    Grazie
  • Re: Liste in C

    No, semmai dovresti scrivere tu, qui nel forum, il codice che hai detto che non funziona,spiegare cosa hai fatto, dire cosa succede o se hai errori e si cerca di capire dove sbagli. Cosi impari, con il copia incolla della pappa pronta, no.

    A prescindere dalla if, sai leggere un file? Sai inserire un nuovo elemento in lista?
  • Re: Liste in C

    Questo è il mio codice... ora non da errori ma non funziona. Si so leggere da file in modo lineare, ho problemi con le condizioni.
    Non riesco ancora a gestire il tutto coi puntatori mi sa, ho un blocco mentale.


    Tiponodo *creanodo(char *titolo, int codice, char *editore, int prezzo);
    tiponodo *inserttail(tiponodo *head, tiponodo *n);
    void printlist(tiponodo *t);

    int main()
    {
    FILE *fp;
    char titolo[10];
    int codice=0;
    char editore[10];
    int prezzo=0;
    tiponodo *lista=NULL, *aux=NULL;

    fp=fopen("elenco_libri", "r");
    while(fscanf(fp, "%s,%d,%s,%d\n", titolo, &codice, editore, &prezzo)==4){
    for (aux=lista; aux; aux->next){
    if(!strcmp(aux->titolo, "nonvalido")==0){
    aux=creanodo(aux->titolo, aux->codice, aux->editore, aux->prezzo);
    lista=inserttail(lista, aux);
    }
    else aux=aux->next;
    }

    printlist(lista);

    }

    return 0;
    }

    tiponodo *creanodo(char *titolo, int codice, char *editore, int prezzo) {
    tiponodo *new;

    new=(tiponodo *)malloc(sizeof(tiponodo));
    if(!new){
    fprintf(stderr,"Errore di allocazione \n");
    exit(-1); }

    strcpy(new->titolo,titolo);
    new->codice=codice;
    strcpy(new->editore, editore);
    new->prezzo=prezzo;
    new->next=NULL;
    return new;
    }
    tiponodo *inserttail(tiponodo *head, tiponodo *n){
    if(!head){
    n->next=NULL;
    return n;
    }
    head->next=inserttail(head->next,n);
    return head;

    }
    void printlist(tiponodo *t){
    if(!t) return t;
  • Re: Liste in C

    Per il codice usa i tag code altrimenti non su capisce molto.

    Il confronto lo devi fare con la variabile titolo che leggi da file.
Devi accedere o registrarti per scrivere nel forum
5 risposte