Esercizio con typedef

SalvatCpo
// Definisci il tipo Classe come array di tipo Alunno, definito a sua volta come struttura contenente due sottostrutture:
// anagrafica, composta da nome e cognome, e valutazione, composta da un vettore delle medie in 100simi dei 5
// anni di scuola superiore e poi una variabile
// intera che esprime il voto da 60 a 101 del diploma. Scrivi una funzione che stampa il cognome degli alunni che hanno una
// media dei 5 anni superiore a 90/100 e un voto di diploma superiore a 90. La dimensione della classe sia DIM definita
// con valore 10.

#define DIM 10
typedef struct alunno {
struct anagrafica {
char nome[20];
char cognome[20];
};
struct valutazione {
int v[5];
int x;
};
} z;
typedef z classe[DIM];
int main() {
system ("PAUSE");
return 0;
}
void seleziona (classe a)
{
int i=0, j=0, s=0;
while (i {
if (a.valutazione.x>90)
{
j=0;
s=0;
while (j<5)
{
s=s+a.valutazione.v[j];
j++;
}
s=s/5;
if (s>90)
{
printf ("%s", a.anagrafica.cognome);
}
}
i++;
}
}

Quando compilo il dev c++ mi dice "invalid use of struct alunno::valutazione and alunno::anagrafica.

Dov'è l'errore? Grazie :-D

Risposte
vict85
Due commenti prima di entrare nel codice:
[list=1][*:24pvu13k]Usa il tag code, è obbligatorio e questo non è più il tuo primo messaggio. Per intenderci per introdurre un semplice Hello World dovresti fare qualcosa tipo:
[code]int main() {
	std::cout << "Hello World" << std::endl;
}
[/code] e verrebbe visualizzato come
int main() {
	std::cout << "Hello World" << std::endl;
}
[/*:m:24pvu13k]
[*:24pvu13k] Dove sono finiti gli include? Non è la prima volta che noto la loro mancanza, non li stai copiando qui oppure non le hai proprio inserite nel tuo codice? Perché se non lo hai fatto devi inserirle.[/*:m:24pvu13k][/list:o:24pvu13k]

Nel tuo codice ci sono molti errori. Ma il maggiore sta nel fatto che [inline]struct valutazione[/inline] è il nome della struttura e non il nome della variabile di tipo [inline]struct valutazione[/inline] all'interno della [inline]struct alunni[/inline]. Alcune possibilità:
[list=1][*:24pvu13k] non dividi gli elementi della struct alunni tra anagrafica e valutazione;
typedef struct alunno {
	char nome[20];
	char cognome[20];
	int v[5];
	int x;
} z;
[/*:m:24pvu13k]
[*:24pvu13k] definisci le strutture a parte e dai un nome agli elementi;
struct anagrafica {
	char nome[20];
	char cognome[20];
};

struct valutazione {
	int v[5];
	int x;
};

struct alunno {
	struct anagrafica anag;
	struct valutazione val;
};

// se proprio senti il bisogno del typedef
typedef struct alunno z;
[/*:m:24pvu13k]
[*:24pvu13k] Se non hai bisogno di usare le due strutture separatamente puoi usare delle strutture anonime;
typedef struct alunno {
	struct {
		char nome[20];
		char cognome[20];
	} anagrafica;
	struct {
		int v[5];
		int x;
	} valutazione;
} z;
oppure addirittura
typedef struct alunno {
	struct {
		char nome[20];
		char cognome[20];
	};
	struct {
		int v[5];
		int x;
	};
} z;
quest'ultimo va usato come il caso 1. [/*:m:24pvu13k][/list:o:24pvu13k]

Non hai dichiarato la funzione seleziona prima del main.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.