Domanda [AIUTO] Array di struct, come funziona?

Stato
Discussione chiusa ad ulteriori risposte.

Daniele1100000

Utente Gold
13 Agosto 2009
640
106
54
318
Salve sto creando una struttura che comprende il nome,sesso,ed altezza di piú persone,
Ho pensato si facesse cosi,
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SEX 2;
#define STRING 10;
struct persone{
    char name[STRING][4];
    char sex[SEX][4];
    float altezza[4];
}people;
int main(){
    printf("\nBanca Dati \nLista delle persone da cercare \n Daniele (1) \n Alessia (2) \n Mirko (3) \n Massimo (4) \n Rosanna (5) \n inserisci il numero della persona che vuoi cercare \n");
    people;
    strcpy(people.name,"Daniele");
    strcpy(people.sex, "M");
    float altezza = 1.67;
    printf("%s %s %f \n",people.name,people.sex,altezza);
    strcpy(people.name[1],"Alessia");
    strcpy(people.sex [1],"F");
    float altezza[1] =1.60;
    printf("%s %s %f",people.name[1],people.sex[1],altezza[1]);
}
Facendo cosi mi da questo errore
Struct.c(20,7) : error : altezza : Symbol conflict found
Praticamente mi da l'errore sul [1].della seconda persoba della struttura,come si fa?.
 
Parto dal fatto che stai sbagliando a dichiarare la struttura.
Quello che andrebbe fatto è considerare una sola occorrenza dei dati che contiene.
( anche perchè per la variabile 'altezza' ci sarebbero dei problemi non essendo costruita come le altre... anche se tutte e tre così non vanno bene)
C:
#define STRING = 10;
typedef struct{
    char name[STRING];
    char sex;
    float altezza; 
} persona;
In C non esiste il concetto di stringa, per questo devi usare un array di caratteri.
Per questo motivo, si può evitare di creare un array per il sesso e dichiarare semplicemente la variabile come char.
Ora hai una struttura che rappresenta una persona.
Quello che dovresti fare adesso è allocare lo spazio di questa struttura per quante persone hai intenzione di registrare.
Tramite prompt chiedi il numero di persone da memorizzare e poi allochi sufficiente spazio in memoria per poterle salvare tutte.
C:
persona *people = malloc( numPersone * sizeof(persona) );
Adesso ti trovi nella situazione in cui hai:
- la rappresentazione di una persona ( la struttura )
- il numero totale di persone da dover gestire
- la giusta quantità di memoria allocata su cui poter lavorare

Non resta altro da fare che chiedere man mano i dati delle persone e salvarli
C:
for( i = 0; i < numPersone; i++ ){
    printf("Inserisci il nome della persona\n")
    scanf("%s", people[i].name)
    printf("Inserisci il sesso della persona\n")
    scanf("%c", people[i].sex)
    printf("Inserisci l'altezza della persona\n")
    scanf("%f", people[i].altezza)
}

Non ho avuto modo di provare il codice, mi scuso in anticipo per eventuali errori.
Comunque il flusso da utilizzare è questo ( a meno che qualcuno non abbia una soluzione più elegante )
 
Stato
Discussione chiusa ad ulteriori risposte.