View Full Version : [C] malloc liste strutture
blindwrite
12-05-2006, 16:56
voglio creare una lista che contenga nome, cognome e matricola degli studenti del mio corso
ho abbozzato qualcosa, ma credo ci sia qualche errore nella gestione dell'accesso allo studente successivo. riporto il pezzo secondo me incriminato:
#include <stdio.h>
#include <stdlib.h>
#define n 32
typedef struct stud{
char nome[n], cognome[n];
int matricola;
struct stud* next;
}studente;
studente* memory()
{
return((studente*) malloc (sizeof(studente))) ;
}
int main ()
{
int i,j;
studente *nuovo;
nuovo=memory();
printf("inserisci nuovo studente\n");
scanf("%s %s %d", nuovo->nome,nuovo->cognome,nuovo->matricola);
nuovo=nuovo->next;
nuovo->next=NULL;
system("PAUSE");
}
l'errore compare quando setto il puntatore next=NULL.
il sistema non dovrebbe farlo in automatico?
sarei grato se qualcuno mi spiegasse cosa c'è di sbagliato.
garzie
blindwrite
12-05-2006, 17:00
perchè invece questo codice funziona(posto tutto, ma mi interessa solo la parte simile a quella citata nel primo post)
# include <stdio.h>
# include <string.h>
#include <stdlib.h>
# define M 30
typedef struct stud {
char nome[M],matricola[7];
char voto[4];
struct stud *s;
}studente;
studente* crea ()
{
return((studente*)malloc (sizeof(studente)));
}
int main ()
{
int j,k;
char i[7];
studente *nuovo,*primo;
nuovo=crea();
primo=nuovo;
do{
printf("\t\t Menu di selezione\nI. Nuovo studente\nC. Cancella studente\nV. Visualizza\nE. Esci\n");
printf("seleziona\n");
scanf("%s",i);
if(strcmp("I",i)==0){
nuovo->s=crea();
printf("inserisci dati studente:\n");
scanf("%s %s %s",nuovo->nome,nuovo->matricola,nuovo->voto);
nuovo=nuovo->s;
nuovo->s=NULL;
}
if(strcmp("V",i)==0){
for(nuovo=primo;nuovo->s!=NULL;nuovo=nuovo->s){
printf("%s\t %s\t %s\n", nuovo->nome,nuovo->matricola,nuovo->voto);
}
}
}while(i[0]!='E');
system("PAUSE");
}
blindwrite
13-05-2006, 17:15
ho capito cosa sbagliavo!
ora mi si pone il problema di togliere un'elemento dalla lista e di riconcatenarla
per il momento ho scritto questo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define n 32
typedef struct stud{
char nome[n], cognome[n];
char matricola[7];
struct stud *next;
}studente;
studente* memory()
{
return((studente*) malloc (sizeof(studente))) ;
}
int main ()
{
int k=0,z=0;
char i[2],j[2],cancella[n];
studente *nuovo ,*primo,*erase;
nuovo=memory();
primo=nuovo;
printf("\t\tMenu\ni. inserisci\nv. visualizza\nc. cancella\ne. esci\n");
do{
printf("\nseleziona..\n");
scanf("%s",i);
if(i[0]=='i'){
nuovo->next=memory();
printf("inserisci nuovo studente\n");
scanf("%s %s %s", nuovo->nome,nuovo->cognome,nuovo->matricola);
nuovo=nuovo->next;
nuovo->next=NULL;
}
if(i[0]=='v'){
printf("\n");
for(nuovo=primo;nuovo->next!=NULL;nuovo=nuovo->next){
printf("%s %s %s\n", nuovo->nome,nuovo->cognome,nuovo->matricola);
}
if(primo->next==NULL){
printf("nulla da visualizzare");
system("cls");
}
}
if(i[0]=='c'){
printf("1.cancella tutto\n2.cancella per nome\n");
scanf("%s",j);
if(j[0]=='1'){
primo=primo->next;
primo->next=NULL;
}
if(j[0]=='2'){
printf("inserire nome da cancellare\n");
scanf("%s",cancella);
for(nuovo=primo;nuovo->next!=NULL;nuovo=nuovo->next);{
if(strcmp(cancella,nuovo->nome)==0){
erase=nuovo;
}
}
}
}
}while(i[0]!='e');
system("PAUSE");
}
erase adesso dovrebbe puntare all'elemento da togliere alla lista, ma come faccio a collegare il precedente al successivo?
nessuno sa darmi una mano?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.