Ciao a tutti sono alle prese con un'altro quesito.
Il programma da svolgere è il seguente:
Dato un vettore di corsi (ad esempio di laurea) debbo creare una funzione con determinate funzionalità(non spiego attualmente cosa deve fare questa funzione dato che il problema mi si genera prima)
Qua sotto metto il codice completo, dove dato un vettore di tipo struct, immetto da utente i dati.
In sostanza vi è una struttura informazioni per i corsi e una struttura informazioni per le lezioni di ciascun corso
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define X 50
void crea_corso(struct corso V[]);
struct lezione * lista_lezioni(void);
struct lezione{ //struttura lezioni, per semplicità sono dichiarati tutti int
int giorno;
int ora;
int aula;
struct lezione *next;
};
struct corso{
char nome[X];
struct lezione *ptr_lezione;
};
void main()
{
struct corso V[2]; //definisco un vettore di 3 elementi
int i;
for(i=0;i<=2;i++)
V[i].ptr_lezione=NULL; // inizializzo il puntatore alla lista delle lezioni di ciascun corso
printf("CORSI PREVISTI\n");
crea_corso(V);
}
void crea_corso(struct corso V[]){
int i;
for(i=0;i<=2;i++){
printf("Corso [%d]: ",i+1);
scanf("%s",V[i].nome);
V[i].ptr_lezione=lista_lezioni(); //in questa maniera ciascun puntatore alla testa dellalista di esami di ogni corso viene aggiornato.
}
}
struct lezione* lista_lezioni(void){ // in questa maniera ritorna il puntatore alla lista lezioni
struct lezione *a,*b;
int num_lezioni,i;
printf("Quante lezioni sono previste per il corso?\n");
scanf("%d",&num_lezioni);
if(num_lezioni==0)
a=NULL;
else {
a=(struct lezione *)malloc(sizeof(struct lezione));
printf("La prima lezione si svolgerà con i seguenti ");
printf("Aula:");
scanf("%d",&a.aula);
printf("Giorno: ");
scanf("%d",&a.data);
printf("Ora: ");
scanf("%d",&a.ora);
b=a;
//creazione elementi successivi
for(i=2;i<=num_lezioni;i++){
b->next=(struct lezione *)malloc(sizeof(struct lezione));
b=b->next;
printf("Lezione[%d]",i);
printf("Aula:");
scanf("&d",&b.aula);
printf("Giorno: ");
scanf("%d",&b.data);
printf("Ora: ");
scanf("%d",&b.ora);
}
b->next=NULL;
}
return a;
}
In pratica prima di inserire altro codice per esempio per stampare a video ciò che l'utente ha inserito, provo a far girare il codice finora inserito, per mio scrupolo personale.
Accade questo:
mi genera ad esempio errore su ciò
void crea_corso(struct corso V[]);
dicendomi array type has incomplete element type.
Perchè???
Il passaggio dei parametri e la dichiarazione7definizioni delle funzioni a me sembra corretta, ho inoltre provato a passare il tutto come se fosse un puntatore, che da teoria è cosa lecita
void crea_corso(struct corso *);
.......
......
void main(){
....
crea_corso(V);
.....
}
void crea_corso(struct corso *){
.....
}
ma mi genera sempre errore, come mai?
Cosa non riesco a capire?
Inoltre mi genera errore anche qua:
......
a=(struct lezione *)malloc(sizeof(struct lezione));
printf("La prima lezione si svolgerà con i seguenti ");
printf("Aula:");
scanf("%d",&a.aula);
printf("Giorno: ");
scanf("%d",&a.data);
printf("Ora: ");
scanf("%d",&a.ora);
......
DICENDOMI
error:request for member 'data' in something not a structure or union
questo errore lo genera sia per il membro data, giorno, ora, sia per il primo elemento della lista sia per i successivi.
Non riesco proprio a capire il perchè di ciò.
Chiedo pertanto un aiuto per capire tutto ciò, grazie!