Sono arrivato alla conclusione di fare una listra di strutture ma anche se credo che tutto a righe di codice funzioni il mio compilatore non è altrettanto d'accordo vi posto il nuovo sorgente per tutti i "pazzi " che vorranno leggerlo e aiutarmi p.s. l'errore è logico e non sintattico grazie a tutti
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct studenti
{ char *nome;
char *cognome;
char matricola[15];
struct studenti*next;
};
void stampa(struct studenti*);
void inserisci(struct studenti*);
int main()
{ int scelta;
struct studenti *alunni ;
alunni=(struct studenti*)malloc(sizeof(struct studenti));
alunni->next=NULL;
do{
printf(" _________________________\n");
printf("|1: inserisci i dati------|\n");
printf("|2: stampa----------------|\n");
printf("|3: exit------------------|\n");
printf("|-------------------------|\n");
scanf("%d",&scelta);
if(scelta==1)
{
inserisci(alunni);
}
if(scelta==2)
{
stampa(alunni);
}
}while(scelta!=3);
alunni=NULL;
return 0;
}
void inserisci(struct studenti *alunno)
{
char *nome,*cognome,*matricola;
cognome=nome=matricola=(char*)malloc(4);
while(alunno->next!=NULL){
alunno=alunno->next; // vado avanti nella lista fino a che non trovo l'ultimo
}
printf("inserisci un nome\n");
scanf("%s",nome);
alunno->nome=(char*)malloc(strlen(nome+1)*sizeof(char*));// prendo memoria lo stretto indispensabile
strcpy(alunno->nome,nome);// copia del dato nella struttura
printf("inserisci il cognome\n");
scanf("%s",cognome);
alunno->cognome=(char*)malloc(strlen(cognome+1)*sizeof(char*));
strcpy(alunno->cognome,cognome);
printf("inserisci la matricola\n");
scanf("%s",matricola);
alunno->matricola[0]=*(char*)malloc(strlen(matricola+1)*sizeof(char*));
strcpy(alunno->matricola,matricola);
}
void stampa(struct studenti *alunno){
while(alunno->next!=NULL){ // scorro fino all'ultimo elemento e mentre lo faccio stampo
printf("_________________________________\n");
puts(alunno->nome);
puts(alunno->cognome);
puts(alunno->matricola);
printf("_________________________________\n");
alunno=alunno->next;
}
}