Si così và, ora ho provato ad aggiungere inserimento al nodo corrente aggiungendo un if nel case 2, così:
if (head==NULL){
printf("Inserie il nuovo nome: ");scanf("%s",dato);
insl_testa(dato,&head); break;}
else{
printf("Inserie il nuovo nome: ");scanf("%s",dato);
insl_nodo(dato,&punt); break;}
però il programma crasha
EDIT:
ora ho aggiunto il campo eta, ma mi crasha quando faccio la scanf per prendere l'età...non capisco proprio perchè
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct persona{
char nome[20];
short eta;
struct persona *p_next;} Persona;
void insl_testa(char [] , short , Persona **);
void insl_nodo(char [] , short, Persona **);
void print_lista(Persona *);
void main ()
{
int op, menu=100;
Persona *head, *punt;
char dato_n[20]; short dato_e;
head=NULL;//creiamo la lista
while (menu<=100)
{
puts("\n\n\n=======================");
puts("GESTIONE DI UNA LISTA");
puts("=======================\n\n");
puts("Selezionare l'operazione:\n");
puts("1=Visualizzare la lista");
puts("2=Inserire un elemento");
puts("3=eliminare un elemento");
scanf("%d",&op);
switch (op)
{
case 1: print_lista(head); break;
case 2 :if (head==NULL){
printf("Inserie il nuovo nome: ");scanf("%s",dato_n);
printf("Inserie l'eta': ");scanf("%d",dato_e);
insl_testa(dato_n,dato_e,&head); break;}
else{
printf("Inserie il nuovo nome: ");scanf("%s",dato_n);
printf("Inserie l'eta': ");scanf("%d",dato_e);
insl_nodo(dato_n,dato_e,&punt); break;}
}
}
}
void insl_testa (char dato_n[20], short dato_e, Persona **p_head)
{
Persona *ptr;
ptr=calloc(1,sizeof(Persona));//allochiamo memoria per il nuovo nodo
strcpy(ptr->nome,dato_n);//assegna alla nuova memoria allocata il nuovo nodo
ptr->eta=dato_e;
ptr->p_next=*p_head;//il puntatore successivo assume il valore di quello di testa (cioè il punt di testa non è più di testa)
*p_head=ptr;//aggiorniamo head al nuovo nodo, il nuovo nodo diventa puntato dal puntatore di testa
}
void insl_nodo(char dato_n[20], short dato_e, struct persona **p_punt)
{
struct persona *ptr;
ptr=calloc(1,sizeof(struct persona));
strcpy(ptr->nome,dato_n);
ptr->eta=dato_e;
ptr->p_next=(*p_punt)->p_next;
(*p_punt)->p_next=ptr;
*p_punt=ptr;
}
void print_lista(Persona *pl)
{
printf("\n\n");
printf("lista: \n");
while (pl){
printf("%s\n", pl->nome);
pl = pl->p_next;
}
printf("\n\n");
}