Salve Oregon,
Innanzitutto, ti ringrazio molto per la risposta.
Sto svolgendo un esercizio (senza soluzione), perché come ho detto sono alle prime armi con il C, e l'indicazione dello stesso non specifica quale metodo usare, quindi sono voluto rimanere nel più “semplice” e generale possibile, ma magari anche un tuo consiglio su quale preferire mi farebbe molto comodo.
Per chiare la parte dell'esercizio che mi interessa e in cui ho problemi chiede la seguente cosa: “Definire la funzione imposta_persona() che chiede di inserire da tastiera il numero di persone, che può variare da minimo 1 a massimo 4. Ogni persona è rappresentata da una struct Persona, che viene creta in memoria dinamica. L’insieme delle persone è rappresentato da un array di 4 Struct Persone* (NULL se la persona è assente). Inoltre, il nome viene inserito da tastiera e l'eta è fissa a 20 anni per tutte le persone.”
Dovendo svolgere l'esercizio seguendo il principio di programmazione modulare la funzione imposta_persona() è definita in un modulo e la struttura in un'altro che è incluso.
Io come scritto da te nella funzione imposta_persona ho utilizzato un vettore statico e questo è come ho strutturato il modulo relativo alla funzione imposta_persona():
#include "persona.h"
static void crea_persona(struct Persona *personaPtr[], int i);
unsigned short num_persone = 0;
int c = 0;
struct Persona* persone[4];
void imposta_persona(){
do {
printf("\nInserire il numero di persone (da un minimo di 1 a un massimo di 4):\n\n");
scanf(%hu, &num_persone);
while((c = getchar()) != '\n' && != EOF);
for(int i = 0; i < num_persone; i++){
persone[i] = (struct Persona*) malloc(sizeof(struct Persona));
}
switch(num_persone){
case 1:
crea_persona(persone[0], 0);
persone[1] = NULL;
persone[2] = NULL;
persone[3] = NULL;
break;
case 2:
crea_persona(persone[0], 0);
crea_persona(persone[1], 1);
persone[2] = NULL;
persone[3] = NULL;
break;
case 3:
crea_persona(persone[0], 0);
crea_persona(persone[1], 1);
crea_persona(persone[2], 2);
persone[3] = NULL;
break;
case 4:
crea_persona(persone[0], 0);
crea_persona(persone[1], 1);
crea_persona(persone[2], 2);
crea_persona(persone[3], 3);
break;
default:
printf("Numero di persone non valido);
}
} while(num_persone < 1 || num_persone > 4);
}
static void crea_persona(struct Persona *personaPtr[], int i){
personaPtr -> eta = 20;
}
La definizione della struttura è la seguente:
struct Persona {
char nome_persona[40];
int eta;
};
Bene, a questo punto compilando il programma e aggiungendo anche i flag -std =c11 -Wall mi ritorna il seguente errore: “error: ‘*personePtr’ is a pointer; did you mean to use ‘->’?”
E vorrei capire quale fosse il problema visto che l'operatore ? l'ho utilizzato.
P.S. ho tralasciato la parte del nome della persona inserito da tastiera, perchè tanto il problema persiste e perché in particolare mi interessa e mi resta difficile capire come posso definire un array di 4 Struct Persone*.