Salve, ho questa funzione che alcune volte stampa correttamente tutti i numeri in ordine crescente e altre volte trasla i voti di una posizione lasciando vuota la prima posizione. Cosa può esserci di sbagliato? Grazie.
void OrdinamentoCrescenteVotiInElenco(Studente *c_ElencoStudenti, int dim){ //bubble sort
Studente temp;
int crescente = 0;
int i;
while(crescente < dim){
i = 0;
crescente = 0;
while(i < dim){
if ((c_ElencoStudenti + i)->voto > (c_ElencoStudenti + (i + 1))->voto){
temp = *(c_ElencoStudenti + i);
*(c_ElencoStudenti + i) = *(c_ElencoStudenti + (i + 1));
*(c_ElencoStudenti + (i + 1)) = temp;
}else crescente ++;
i++;
}
}
//STAMPA (VA SPOSTATO IN UN' ALTRA FUNZIONE)
int j = 0;
while(j<dim){
printf("Voto: %d\n",(c_ElencoStudenti + j)->voto);
j++;
}
printf("FINE\n");
return;
}
Stampa corretta:
Voto: 20
Voto: 24
Voto: 25
Voto: 27
Voto: 28
Voto: 29
FINE
Stampa Errata:
Voto: -1522618538
Voto: 20
Voto: 24
Voto: 25
Voto: 27
Voto: 28
FINE