Non l'ho postato perchè è lungo ma se mi dite che posso provvedo subito
main:
int main(int argc, char *argv[])
{
HANDLE hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
int z,i,c,scelta;
int cont = 0;
int cont_macc_rot = 0;//variabile usata per sapere il numero di macchine presenti sulla rotonda
int targa;//variabile usate per leggere da file la targa dell auto
int posizione_e;//variabile usata per leggere da file dove si trova l' auto inizialmente
int strada_u;//variabile usata per indicare la strada di uscita che l' auto vuole prendere
struct istante * iniziale=NULL;
iniziale = (struct istante*) malloc(sizeof(struct istante));
iniziale->rotat_ist = (struct rotatoria*) malloc(sizeof(struct rotatoria));
for(c=0;c<5;c++){
iniziale->stradat[c] = (struct strada*) malloc(sizeof(struct strada));
iniziale->stradat[c]->nome = c;
iniziale->stradat[c]->attesa = (struct coda *) malloc(sizeof(struct coda ));
iniziale->stradat[c]->attesa->collegamento=(struct rotatoria *)malloc(sizeof(struct coda));
}
iniziale->rotat_ist=crearotatoria(iniziale->rotat_ist);
FILE* file = fopen ("macchine.txt","r");
if(file != NULL ){
while(!feof(file)){
if ((fscanf(file,"%d" ,&targa)>=0) &&(fscanf(file,"%d",&posizione_e)>=0) && (fscanf(file,"%d",&strada_u)>=0)){
if((posizione_e >= 0) && (posizione_e < 15) && (cont_macc_rot <= 15) && (targa != 0)){
printf("\n%d",posizione_e);
if(!(metti_in_rotonda(iniziale->rotat_ist, targa, posizione_e, strada_u )))
printf("macchina con targa: %d non inserita perche la posizione %d e' gia' occupata",targa,posizione_e);
else
cont_macc_rot++;
}
if((posizione_e >= 15) && (posizione_e < 19) && (targa != 0)){
switch(posizione_e){
case 15:
iniziale->stradat[0]->attesa = ins_coda(iniziale->stradat[0]->attesa,targa,strada_u);
break;
case 16:
iniziale->stradat[1]->attesa = ins_coda(iniziale->stradat[1]->attesa,targa,strada_u);
break;
case 17:
iniziale->stradat[2]->attesa = ins_coda(iniziale->stradat[2]->attesa,targa,strada_u);
break;
case 18:
iniziale->stradat[3]->attesa= ins_coda(iniziale->stradat[3]->attesa,targa,strada_u);
break;
case 19:
iniziale->stradat[4]->attesa = ins_coda(iniziale->stradat[4]->attesa,targa,strada_u);
break;
}
}
}
}
printf("\n");
fclose(file);
}else
fputs ("File impossibile da aprire\n",stderr);
funzioni:
struct rotatoria * crearotatoria(struct rotatoria * top){
struct rotatoria *p,*last;
int i;
top = NULL;
for(i=0;i<15;i++){
p = (struct rotatoria*)malloc(sizeof(struct rotatoria));
if(i==0)
last = p;
p->autom_rot = (struct autom*)malloc(sizeof(struct autom));
p->autom_rot->targa = 0;
p->autom_rot->strada_arrivo = 0;
p->posizione = 14-i;
p->next=top;
top = p;
}
last->next = top ;
return(top);
}
int metti_in_rotonda(struct rotatoria * rot,int targa, int pos_e, int str_u){
if(rot->posizione == pos_e){
if(rot->autom_rot->targa == 0){
rot->autom_rot->targa = targa;
rot->autom_rot->strada_arrivo = str_u;
return 1;
}
else
return 0;
}
else
return metti_in_rotonda(rot->next, targa, pos_e, str_u);
}
struct coda * crea(int targa,int uscita){
struct coda * appoggio = (struct coda*)malloc(sizeof(struct coda));
appoggio->auto_strada = (struct autom*)malloc(sizeof(struct autom));
appoggio->auto_strada->targa = targa;
appoggio->auto_strada->strada_arrivo = uscita;
appoggio->next=NULL;
appoggio->collegamento=(struct rotatoria *)malloc(sizeof(struct rotatoria));
return appoggio;
}
struct coda * ins_coda(struct coda * via,int targa,int strada_u){
if(via == NULL)
via= crea(targa,strada_u);
else
via->next = ins_coda(via->next,targa,strada_u);
return via;
}
grazie per la pazienza