Dalla prova effettuata va tutto ok.
Adesso mi sono spinto oltre per la gestione di un registro studenti. Ho fatto la funzione inserimento visualizzazione ma non riesco a capire perché non funziona la funzione cancella studente. Qualcuno potrebbe darmi una mano?
Di seguito il listato fatto:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define OUT 100
#define DIM 30
struct studente
{
char cognome[DIM];
char nome[DIM];
int voto;
struct studente *pun;
};
struct studente *creaLista(struct studente *);
void visLista(struct studente *);
struct studente *paus=0;
void canPer(struct studente *);
int i=0;
int main()
{
int scelta;
char invio;
struct studente *punLista = NULL;
while(scelta!=OUT)
{
system("cls");
printf("\n\n\t\t MENU");
printf("\n\n 1. Immissione persona");
printf("\n\n 2. Cancellazione persona");
printf("\n\n 3. Ricerca persona");
printf("\n\n 4. Visualizza anagrafe");
printf("\n\n 0. Fine");
printf("\n\n\n Scegliere una opzione\n");
scanf("%d", &scelta);
scanf("%c", &invio);
printf("\n\n\n");
switch(scelta)
{
case 0:
scelta=OUT;
break;
case 1:
i=i+1;
punLista=creaLista(punLista);
break;
case 2:
canPer(punLista);
break;
case 3:
//ricPer();
break;
case 4:
visLista(punLista);
break;
}
}
return 0;
}
struct studente *creaLista(struct studente *head)
{
struct studente *p, *tmp;
p = (struct studente*) malloc(sizeof(struct studente));
p->pun = NULL;
if(i == 1 && head == NULL)
{
printf("Inserisci il nome della 1a persona:\n");
scanf("%s", &p->nome);
printf("Inserisci il cognome della 1a persona:\n");
scanf("%s", &p->cognome);
printf("Inserisci voto della 1a persona:\n");
scanf("%d", &p->voto);
head = p;
return head;
}
printf("Inserisci il nome della %da persona:\n",i);
scanf("%s", &p->nome);
printf("Inserisci il cognome della %da persona:\n",i);
scanf("%s", &p->cognome);
printf("Inserisci voto della %da persona:\n",i);
scanf("%d", &p->voto);
tmp = head;
while(tmp->pun != NULL)
tmp = tmp->pun;
tmp->pun = p;
return head;
}
void visLista(struct studente *p)
{
char invio;
printf("REGISTRO ANAGRAFE\n\n");
while(p!=NULL)
{
printf("nome:%s\n", p->nome);
printf("cognome:%s\n", p->cognome);
printf("voto:%d\n", p->voto);
p=p->pun;
printf("\n\npremere un tasto per vedere l'elemento successivo");
scanf("%c", &invio);
}
printf("NULL\n");
}
void canPer(struct studente *head)
{
struct studente *canc, *canc1;
canc=head;
char nom1[DIM], cogn1[DIM];
printf("CANCELLA STUDENTE\n\n");
printf("Inserisci i dati dello studente da cancellare\n\n");
printf("Inserisci nome\n");
scanf("%s", &nom1);
printf("inserisci cognome\n");
scanf("%s", &cogn1);
if(strcmp(canc -> nome, nom1)==0 && strcmp(canc -> cognome, cogn1)==0){
head = canc -> pun;
free(canc);}
else {
canc = canc -> pun;
while(canc != NULL){
if(strcmp(canc -> nome, nom1)==0 && strcmp(canc -> cognome, cogn1)==0){
free(canc1 -> pun);
canc1 -> pun = canc1 -> pun -> pun;
}
canc = canc -> pun;
canc1 = canc1 -> pun;
}
}
}