Il compilatore non mi da alcun errore, ne warning, però non so ancora se funziona.
Adesso ti posto la funzione completa:
/* Definizione funzione di ordinamento */
void ordinamento(lista_t *testa_p,
int scelta)
{
if (testa_p && testa_p->succ_p)
{
int k;
do
{
lista_t *elem_p = testa_p;
k = 0;
while (elem_p->succ_p)
{
lista_t *elem_p1 = elem_p;
elem_p = elem_p->succ_p;
if (scelta == 1)
{
if (strcmp(elem_p1->nome_vino, elem_p->nome_vino) > 0)
{
char tmp_nome[DIM_NOME];
char tmp_id[DIM_ID];
char tmp_anno[DIM_ANNO];
char tmp_luogo[DIM_LUOGO];
strcpy(tmp_nome, elem_p1->nome_vino);
strcpy(elem_p1->nome_vino, elem_p->nome_vino);
strcpy(elem_p->nome_vino, tmp_nome);
strcpy(tmp_id, elem_p1->id_bott);
strcpy(elem_p1->id_bott, elem_p->id_bott);
strcpy(elem_p->id_bott, tmp_id);
strcpy(tmp_anno, elem_p1->anno_prod);
strcpy(elem_p1->anno_prod, elem_p->anno_prod);
strcpy(elem_p->anno_prod, tmp_anno);
strcpy(tmp_luogo, elem_p1->luogo_imb);
strcpy(elem_p1->luogo_imb, elem_p->luogo_imb);
strcpy(elem_p->luogo_imb, tmp_luogo);
k = 1;
}
}
else if (scelta == 2)
{
if (strcmp(elem_p1->id_bott, elem_p->id_bott) > 0)
{
char tmp_nome[DIM_NOME];
char tmp_id[DIM_ID];
char tmp_anno[DIM_ANNO];
char tmp_luogo[DIM_LUOGO];
strcpy(tmp_nome, elem_p1->nome_vino);
strcpy(elem_p1->nome_vino, elem_p->nome_vino);
strcpy(elem_p->nome_vino, tmp_nome);
strcpy(tmp_id, elem_p1->id_bott);
strcpy(elem_p1->id_bott, elem_p->id_bott);
strcpy(elem_p->id_bott, tmp_id);
strcpy(tmp_anno, elem_p1->anno_prod);
strcpy(elem_p1->anno_prod, elem_p->anno_prod);
strcpy(elem_p->anno_prod, tmp_anno);
strcpy(tmp_luogo, elem_p1->luogo_imb);
strcpy(elem_p1->luogo_imb, elem_p->luogo_imb);
strcpy(elem_p->luogo_imb, tmp_luogo);
k = 1;
}
}
else if (scelta == 3)
{
if (strcmp(elem_p1->anno_prod, elem_p->anno_prod) > 0)
{
char tmp_nome[DIM_NOME];
char tmp_id[DIM_ID];
char tmp_anno[DIM_ANNO];
char tmp_luogo[DIM_LUOGO];
strcpy(tmp_nome, elem_p1->nome_vino);
strcpy(elem_p1->nome_vino, elem_p->nome_vino);
strcpy(elem_p->nome_vino, tmp_nome);
strcpy(tmp_id, elem_p1->id_bott);
strcpy(elem_p1->id_bott, elem_p->id_bott);
strcpy(elem_p->id_bott, tmp_id);
strcpy(tmp_anno, elem_p1->anno_prod);
strcpy(elem_p1->anno_prod, elem_p->anno_prod);
strcpy(elem_p->anno_prod, tmp_anno);
strcpy(tmp_luogo, elem_p1->luogo_imb);
strcpy(elem_p1->luogo_imb, elem_p->luogo_imb);
strcpy(elem_p->luogo_imb, tmp_luogo);
k = 1;
}
}
else if (scelta == 4)
{
if (strcmp(elem_p1->luogo_imb, elem_p->luogo_imb) > 0)
{
char tmp_nome[DIM_NOME];
char tmp_id[DIM_ID];
char tmp_anno[DIM_ANNO];
char tmp_luogo[DIM_LUOGO];
strcpy(tmp_nome, elem_p1->nome_vino);
strcpy(elem_p1->nome_vino, elem_p->nome_vino);
strcpy(elem_p->nome_vino, tmp_nome);
strcpy(tmp_id, elem_p1->id_bott);
strcpy(elem_p1->id_bott, elem_p->id_bott);
strcpy(elem_p->id_bott, tmp_id);
strcpy(tmp_anno, elem_p1->anno_prod);
strcpy(elem_p1->anno_prod, elem_p->anno_prod);
strcpy(elem_p->anno_prod, tmp_anno);
strcpy(tmp_luogo, elem_p1->luogo_imb);
strcpy(elem_p1->luogo_imb, elem_p->luogo_imb);
strcpy(elem_p->luogo_imb, tmp_luogo);
k = 1;
}
}
}
} while (k != 0);
}
}
^ Eccola qui.
La invoco dalla main in questo modo:
/* Se l'utente sceglie di ordinare i dati secondo una delle chiavi */
if ((operazione == 4) && (file_caricato != 0))
{
/*Acquisisco la chiave scelta dall'utente */
printf("Scegliere la chiave secondo la quale si desidera ordinare gli elementi:\n\n");
printf("Scelte disponibili:\ndigitare '1' per scegliere la chiave nome;\n"
"digitare '2' per scegliere la chiave id;\n"
"digitare '3' per scegliere la chiave anno;\n"
"digitare '4' per scegliere la chiave luogo.\n");
scanf("%d",
&scelta);
/* Uso uno switch per suddividere i casi di ordinamento */
switch(scelta)
{
case '1':
ordinamento(testa_p,
scelta);
stampa_lista(testa_p);
break;
case '2':
ordinamento(testa_p,
scelta);
stampa_lista(testa_p);
break;
case '3':
ordinamento(testa_p,
scelta);
stampa_lista(testa_p);
break;
case '4':
ordinamento(testa_p,
scelta);
stampa_lista(testa_p);
break;
}
/* Chiedo se l'utente vuole compiere altre operazioni */
printf("\n\nEseguire ulteriori operazioni? Digitare '1' in caso affermativo, '2' in caso negativo\n");
scanf("%d",
&esegui_altre_operazioni);
}
E questa è la funzione per stampare la lista una volta ordinata:
/* Definizione della funzione per stampare la lista ordinata */
void stampa_lista(lista_t *testa_p)
{
lista_t *punt;
for (punt = testa_p;
(punt != NULL);
punt = punt->succ_p)
printf("%s %s %s %s\n",
punt->nome_vino,
punt->id_bott,
punt->anno_prod,
punt->luogo_imb);
}
Purtroppo però non mi stampa nulla, forse c'è qualcosa che non va in quest'ultima funzione.