codice:
#include <stdio.h>
#include <stdlib.h>
void crealista();
void visualizzalista();
void eliminanumero();
struct elenco {
int numero;
struct elenco *pun;
};
int i,n;
struct elenco *p,*paux, *paux2;
main()
{
char risp;
crealista();
visualizzalista();
}
void crealista()
{
printf("Quanti numeri vuoi inserire nella lista? ");
scanf("%i",&n);
if (n==0)
p = NULL;
else
{
p = (struct elenco *)malloc(sizeof(struct elenco));
printf("\nInserisci il valore: ");
scanf("%i",&p->numero);
paux = p;
for (i=1;i<=n-1;i++)
{
paux->pun = (struct elenco *)malloc(sizeof(struct elenco));
paux = paux->pun;
printf("\nInserisci il valore: ");
scanf("%i",&paux->numero);
if (i==n-1)
paux->pun = NULL;
}
}
}
void visualizzalista()
{
char risp;
system("cls");
paux = p;
while (paux != NULL)
{
printf("%i\n",paux->numero);
paux = paux->pun;
}
printf("\n\nVuoi eliminare un numero? (s/n): ");
scanf("%1s",&risp);
switch (risp) {
case 's': eliminanumero();
break;
case 'n': exit(0);
break;
default:
printf("\n%i",risp);
printf("\n\nIl tasto scelto non permette azioni! Il programma viene terminato");
exit(0);
}
}
void eliminanumero()
{
int dato;
printf("Che numero vuoi eliminare? ");
scanf("%i",&dato);
paux = p;
while (paux->pun != NULL)
{
if (paux->pun->numero == dato || paux->numero == dato)
{
paux2 = paux->pun;
paux->pun = paux->pun->pun;
free(paux2);
break;
}
paux = paux->pun;
}
visualizzalista();
}
questo il codice completo, elimina eventuali numeri e tutto ok.
Il problema pero', come avevo giustamente pensato vedendo il codice sopra, é che il primo numero della lista non viene eliminato