Sono alle prese con questa lista e in particolar modo c'è la funzione delete_to list che dovrebbe cancellare tutta la lista.
Il mio prof almeno l'ha fatta cosi.
Adesso vi chiedo , all'interno del main va dichiarata cosi , e quindi come la delete_to _record?
In questo modo , una volta inserito il nome e messo nella variabile trial , ciò che succede è una stampa di caratteri senza senso e dopo qualche secondo un DEBUG.
Mi potete aiutare per favore a capire cos'è che non va.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define DIM 50
#define FILENAME "test.dat"
struct stud{
char nome[DIM];
char cognome[DIM];
char voto[DIM];
struct stud *next;
};
typedef struct stud *stud_p;
void print_list(stud_p p);
int mygetline(char buffer_line[],int Max_l);
stud_p Add_to_list(stud_p head,char nome[],char cognome[],char voto[]);
stud_p delete_list(stud_p head, char key[]);
stud_p delete_record(stud_p head, char key[]);
main(){
char buffer_nome[DIM];
char buffer_cognome[DIM];
char buffer_voto[DIM];
int cont;
char trial[DIM];
stud_p head=NULL;
while(cont){
printf("Inserire nome alunno :");
mygetline(buffer_nome,DIM);
if(strcmp(buffer_nome,"exit")==0)
break;
printf("Inserire cognome alunno :");
mygetline(buffer_cognome,DIM);
if(strcmp(buffer_cognome,"exit")==0)
break;
printf("Inserire voto alunno :");
mygetline(buffer_voto,DIM);
if(strcmp(buffer_voto,"exit")==0)
break;
printf("\n\nPer terminare digitare exit. . .\n\n");
if(strcmp(buffer_nome,"")!=0&&strcmp(buffer_cognome,"")!=0&&strcmp(buffer_voto,"")!=0)
head=Add_to_list(head,buffer_nome,buffer_cognome,buffer_voto);
print_list(head);
}
printf("\n\n cancellare lista: \n\n");
printf("inserire nome: ");
scanf("%s",&trial);
head = delete_list(head, trial);
//head = delete_record(head, trial);
printf("\n\n");
print_list(head);
system("pause");
}
void print_list(stud_p p)
{
int i=1;
while(p!=NULL)
{
printf("%d) nome: %s\ncognome: %s\nvoto: %s\n",i++,p->nome,p->cognome,p->voto);
p=p->next;
}
}
int mygetline(char buffer_line[],int Max_l)
{
int c,i;
i=0;
while((c=getchar())!='\n'&&i<Max_l)
buffer_line[i++]=c;
buffer_line[i]='\0';
return i;
}
stud_p Add_to_list(stud_p head,char nome[],char cognome[],char voto[])
{
stud_p p;
stud_p curr;
p=(stud*)malloc(sizeof(stud));
strcpy(p->nome,nome);
strcpy(p->cognome,cognome);
strcpy(p->voto,voto);
p->next=NULL;
if(head==NULL)
return p;
else
{
curr=head;
while(curr->next!=NULL)
curr=curr->next;
curr->next=p;
return head;
}
}
stud_p delete_record(stud_p head, char key[])
{
stud*temp, *prev, *t;
int found =0;
if(head==NULL)
return head;
if(strcmp(head->nome,key)==0)
{
temp=head;
head=head->next;
free(temp);
return(head);
}
temp=head->next;
prev= head;
while(temp!= NULL && found ==0)
{
if( strcmp(temp->nome,key)==0)
{
found =1;
}
else
{
prev= temp;
temp=temp->next;
}
}
if(found!=0)
{
//il record è presente
prev->next = temp->next;
free(temp);
}
return head;
}
stud_p delete_list(stud_p head, char key[])
{
stud*temp;
if(head==NULL)
return head;
if(strcmp(head->nome,key)==0)
{
temp=head;
temp=temp->next;
free(temp);
}
temp=head;
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=head;
free(temp);
}