Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322

    [c] strutture nidificate

    se io ho delle strutture di questo tipo:
    codice:
    struct NodoLista {
    	int prova;
    	void *value;
    	struct NodoLista *next;
    };
    
    typedef struct NodoLista *list
    
    struct node {
    	char *name;
    	list figli;
    	int id;
    };
    
    typedef struct node *node;
    
    struct attributo {
    	char *nome;
    	char *valore;
    };
    typedef struct attributo attributo;
    e ho un nodo, che nel campo "figli" ha una lista di determinati oggetti. Questi oggetti nel campo void *value, hanno un elemento di tipo attributo.
    La mia domanda è: come posso fare per accedere ai campi (nome e valore) dell'elemento di tipo attributo, vista la nidificazione di strutture?

    cioe:

    node n;
    list l;

    (creo una certa lista dove nel campo void ci sono elementi di tipo attributo e tramite una funzione la metto come campo "figli" nel nodo n)

    ora come faccio se per es volessi cambiare il campo valore di un certo elemento attributo che è nella lista suddetta??

    importante: io nella mia funzione ho a disposizione solo il nodo come paramentro e il nome del campo "nome" dell'oggetto attributo da cambiare

    nodo->figli->value->valore ???

    nodo->figli->valore ???

    queste ovviamente sono illegali.. ma come posso fare??

    grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Intanto, penso che la typedef

    typedef struct attributo attributo;

    che hai riportato, sia invece

    typedef struct attributo *attributo;

    Se e' cosi', puoi accedere con

    codice:
      node n;
      attributo a;
    
      a=(attributo)n->figli->value;
      printf("%s\n", a->nome);
    ... ovviamente, per scorrere i vari nodi dovrai gestire il campo next della NodoLista ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    Originariamente inviato da oregon
    Intanto, penso che la typedef

    typedef struct attributo attributo;

    che hai riportato, sia invece

    typedef struct attributo *attributo;

    Se e' cosi', puoi accedere con

    codice:
      node n;
      attributo a;
    
      a=(attributo)n->figli->value;
      printf("%s\n", a->nome);
    ... ovviamente, per scorrere i vari nodi dovrai gestire il campo next della NodoLista ...
    in questo modo però quando vado a stampare la stringa nome, non me la stampa in maniera corretta ma mi stampa un carattere scorretto..
    codice:
                attributo temp;
    	temp = (attributo)n->attributes->value;
    	printf(" s\n",temp->nome);
    ps: ti ricordo che sono dentro ad una funzione, alla quale viene passato come paramentro un nodo n. E devo lavoare sulla lista di elementi di tipo attributo che appartiene appunto al nodo n.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    ho fatto qualche prova.. ma mi rimane il problema che non riesco ad avere le giuste stringhe.

    faccio un esempio:

    node n;
    attributo a;

    a=(attributo)n->figli->value;
    printf("%s\n", a->nome);


    se per esempio dentro a n->figli->value (che è un elemento di tipo attributo), nel campo nome c'era "PIPPO",
    anche in a->nome dovrei avere PIPPO, invece mi stampa uno o piu caratteri sballati..

    cosa puo essere??

    help!!!!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    A questo punto devi mostrare tutto il codice, compreso quello dell'inserimento, perche' l'errore sara' da qualche altra parte ...

  6. #6
    Originariamente inviato da oregon


    ... ovviamente, per scorrere i vari nodi dovrai gestire il campo next della NodoLista ...
    Chiedo in particolare a Jacopo: ma ha senso scorrere i nodi? Passando un determinato nodo in input (precisamente l'indirizzo di una struttura node) non ho già l'indirizzo e quindi evito di scorrere i nodi?

    Un'altra cosa: un nodo può avere più attributi (coppia nome-valore), giusto? E quindi quello che devo fare inzialmente nella get_attribute è scorrere la lista di attributi del nodo e verificare che sia presente la chiave(nome) passata in input?

    :master: :master:
    Altro non ci apparìa che il cielo e l'onda Quando il Saturnio sul veloce legno Sospese in alto una cerulea nube
    Sotto cui tutte intenebrarsi l'acque

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    Originariamente inviato da LiLyblack
    Chiedo in particolare a Jacopo: ma ha senso scorrere i nodi? Passando un determinato nodo in input (precisamente l'indirizzo di una struttura node) non ho già l'indirizzo e quindi evito di scorrere i nodi?
    non è che scorro i nodi ma scorro la lista attributes che è un campo del nodo..

    Un'altra cosa: un nodo può avere più attributi (coppia nome-valore), giusto? E quindi quello che devo fare inzialmente nella get_attribute è scorrere la lista di attributi del nodo e verificare che sia presente la chiave(nome) passata in input?
    si infatti..scorro lo la lista finche non trovo l'aatributo che ha per nome il paramentro passato nella funzione..


    stai facendo anche tu questo progetto??

  8. #8
    <-- Questa emoticon dovrebbe essere auto-esplicativa.
    Altro non ci apparìa che il cielo e l'onda Quando il Saturnio sul veloce legno Sospese in alto una cerulea nube
    Sotto cui tutte intenebrarsi l'acque

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    siamo negli stessi panni allora..

    miha dato meno problemi il primo modulo, per quanto fosse piu lungo come controlli e tutto il resto.. ma questo secondo me è molto piu incasinato.. con tutte le strutture nidificate e i file incrociati..

    a che punto sei?? io come puoi leggere sopra ho problemi con le funzioni riguardanti gli attribute..

  10. #10
    Devo scrivere le due funzioni per la gestione degli attributi e trovare un modo efficiente per testare la add_child...!

    Speriamo di finire in tempo!


    Altro non ci apparìa che il cielo e l'onda Quando il Saturnio sul veloce legno Sospese in alto una cerulea nube
    Sotto cui tutte intenebrarsi l'acque

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.