Ciao, scrivo per un piccolo problema in questa function che ho scritto:
TipoElem *OrdinaLista(TipoElem *Testa)
{
TipoElem *TestaOrd, *Puntprovv;
int NumProv, Numprov2, i;
char criterio;
printf("inserisci il criterio (c per crescente e d per decrescente)\n");
scanf("%*d%c", &criterio);
Puntprovv = Testa;
TestaOrd = Testa;
if (criterio == 'c')
{
for (i = ContaElementiLista(Testa); i > 0; i--)
{
NumProv = Puntprovv->Dato;
while (Puntprovv != NULL)
{
if (Puntprovv->Dato <= NumProv)
{
NumProv = Puntprovv->Dato;
}
Puntprovv = Puntprovv->Prossimo;
}
Puntprovv = Testa;
while (Puntprovv->Dato != NumProv)
{
Puntprovv = Puntprovv->Prossimo;
}
Numprov2 = Puntprovv->Dato;
Puntprovv->Dato = Testa->Dato;
Testa->Dato = Numprov2;
Testa = Testa->Prossimo;
Puntprovv = Testa;
}
return (TestaOrd);
}
if (criterio == 'd')
{
for (i = ContaElementiLista(Testa); i > 0; i--)
{
NumProv = Puntprovv->Dato;
while (Puntprovv != NULL)
{
if (Puntprovv->Dato >= NumProv)
{
NumProv = Puntprovv->Dato;
}
Puntprovv = Puntprovv->Prossimo;
}
Puntprovv = Testa;
while (Puntprovv->Dato != NumProv)
{
Puntprovv = Puntprovv->Prossimo;
}
Numprov2 = Puntprovv->Dato;
Puntprovv->Dato = Testa->Dato;
Testa->Dato = Numprov2;
Testa = Testa->Prossimo;
Puntprovv = Testa;
}
return (TestaOrd);
}
}
void main()
{
TipoElem *testa;
testa = CreaRiempiLista();
testa = OrdinaLista(testa);
StampaLista(testa);
}
Il problema non è tanto che non mi mette in ordine la lista, più che altro ho un problema con lo scegliere decrescente e crescente, infatti anche se metto c in input mi stampa sempre la lista in ordine decrescente. Penso proprio sia un problema dello scanf, non tanto delle righe di codice che ordinano la lista... . Ho pensato che il codice per ordinare è identico sia per crescente che decrescente, ad eccezione di un <= che diventa un >=.
Precisamente qui;
if (criterio == 'c')
{
for (i = ContaElementiLista(Testa); i > 0; i--)
{
NumProv = Puntprovv->Dato;
while (Puntprovv != NULL)
{
if (Puntprovv->Dato <= NumProv)
{
NumProv = Puntprovv->Dato;
}
Puntprovv = Puntprovv->Prossimo;
}
if (criterio == 'd')
{
for (i = ContaElementiLista(Testa); i > 0; i--)
{
NumProv = Puntprovv->Dato;
while (Puntprovv != NULL)
{
if (Puntprovv->Dato >= NumProv)
{
NumProv = Puntprovv->Dato;
}
Puntprovv = Puntprovv->Prossimo;
}
Correggetemi se sbaglio sotto questo aspetto. Comunque credo che l'errore sia nella lettura del char che successivamente andrà dentro la variabile "criterio". Grazie mille in anticipo