Stampare membri di una struttura

di il
11 risposte

Stampare membri di una struttura

Ciao, avrei un dubbio, se ho per esempio una struttura di questo tipo
typedef struct nomi {
char nome[20];
char cognome[20];
char fisso[20];
char mobile[20];
} Nomi;
e devo stampare tutti i membri della struttura uno dopo l'altro, esiste un modo rapido per stampare tutto quanto (tipo un ciclo)? o devo per forza fare
printf("%s ", Nomi.nome)
e così via, uno per volta. Perchè adesso i membri sono solo cinque quindi non sarebbe un problema, ma se ne avessi di più?
Grazie.

11 Risposte

  • Re: Stampare membri di una struttura

    Se li dimensionerai tutti a [20] potresti fare un ciclo con un puntatore. Prova
  • Re: Stampare membri di una struttura

    Strutture di grandi dimensioni sono spesso divisibili in sottostrutture. Puoi servirti di una funzione che scrive a schermo i valori di una struttura.

    Comunque il nome della tua struttura non ha alcun senso
  • Re: Stampare membri di una struttura

    Weierstrass ha scritto:


    Se li dimensionerai tutti a [20] potresti fare un ciclo con un puntatore. Prova
    Hai ragione non ci avevo pensato!
    Ti ringrazio
  • Re: Stampare membri di una struttura

    _Achille ha scritto:


    Strutture di grandi dimensioni sono spesso divisibili in sottostrutture. Puoi servirti di una funzione che scrive a schermo i valori di una struttura.

    Comunque il nome della tua struttura non ha alcun senso
    Grazie, comunque il nome è la prima cosa che mi è venuta in mente per fare l'esempio.
  • Re: Stampare membri di una struttura

    Scusa Weierstrass non è semplicemente una cosa tipo printf("%s %s %s %s ", Nomi.nome, Nomi.cognome, Nomi.fisso, Nomi.mobile) ?
    Che io sappia il ciclo for lo fai se hai un array di struct tipo nomi Nomi[20].

    Ok, lo so: dimmi dove sbaglio...
  • Re: Stampare membri di una struttura

    La richiesta era appunto quella di non fare la printf specificando il nome di tutti i membri...
  • Re: Stampare membri di una struttura

    @antragorn
    lui dice che siccome gli elementi (membri) di una struttura sono impaccati tra di loro, se ne conosci tipo e lunghezza, puoi calcolarne la posizione all'interno della struttura
    se poi sono tutti dello stesso tipo e della stessa lunghezza pui ciclarli attraverso un puntatore come se fossero in un array
    tipicamente siccome nella struttura indicata hanno tutti la stessa dimensione (20 caratteri)
    tu puoi ciclari con un for
    in pseudocodice
    
    for (int i=0; i<4; i++){
       printf("membro %c: %s", i, indirizzo della struttura più venti per i)
    }
    
    siccome l'indirizzo della struttura è un puntatore a struttura e a te serve un puntatore a char devi fare un po' di casting e giocare un po' con l'aritmetica dei puntatori, ma si riesce
    non è una cosa molto "ortodossa", nemmeno molto leggibile dopo un po': ti dimentichi in fretta di aver truccato, ma se serve funziona....
  • Re: Stampare membri di una struttura

    Solo una precisazione

    printf("membro %d: %s", i, indirizzo della struttura più venti per i)
  • Re: Stampare membri di una struttura

    Comunque intendevo questo
        Nomi p = {"Tizio", "Caio", "02555", "3334444"};
        for(char * ptr = &p.nome[0]; ptr < &p.nome[0] + 20 * 4; ptr += 20)
            printf("%s ", ptr);
  • Re: Stampare membri di una struttura

    Ovvero anche
    
    	for (int i=0; i<4; i++)
    	   printf("%s ", (char *)&p+i*20);
    
    e nel caso di un vettore
    
    	Nomi p[] = {
    		      { "Tizio", "Caio", "02555", "3334444" },
    		      { "Rossi", "Paolo", "12345", "2221111" },
    		      { "Verdi", "Enrico", "67890", "9887987" }
    	          };
    
    	for (int elem=0; elem<3; elem++)
    	{
    	  for (int campo=0; campo<4; campo++)
    	    printf("%s ", (char *)&p + elem*80 + campo*20);
    	  printf("\n");
    	}
    
  • Re: Stampare membri di una struttura

    Grazie a tutti; ho capito il concetto ma adesso devo spendere del tempo per provare.
Devi accedere o registrarti per scrivere nel forum
11 risposte