|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Gières
Messaggi: 3617
|
[C] malloc liste strutture
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: Codice:
#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");
}
il sistema non dovrebbe farlo in automatico? sarei grato se qualcuno mi spiegasse cosa c'è di sbagliato. garzie
__________________
Intel i5 4570 - Gigabyte Z87-HD3 - Antec KÜHLER 620 V4 - Corsair/Kingston 16GB DDR3 1600Mhz - KFA2 GTX 1070 EX @ EXOC bios - SanDisk Ultra II 480GB - EVGA 650GQ - Sony KDL-24EX320 - Logitech G502 & G933 - SteelSeries APEX M500 - W10 64bit |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Gières
Messaggi: 3617
|
perchè invece questo codice funziona(posto tutto, ma mi interessa solo la parte simile a quella citata nel primo post)
Codice:
# 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");
}
__________________
Intel i5 4570 - Gigabyte Z87-HD3 - Antec KÜHLER 620 V4 - Corsair/Kingston 16GB DDR3 1600Mhz - KFA2 GTX 1070 EX @ EXOC bios - SanDisk Ultra II 480GB - EVGA 650GQ - Sony KDL-24EX320 - Logitech G502 & G933 - SteelSeries APEX M500 - W10 64bit |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Gières
Messaggi: 3617
|
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: Codice:
#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");
}
nessuno sa darmi una mano?
__________________
Intel i5 4570 - Gigabyte Z87-HD3 - Antec KÜHLER 620 V4 - Corsair/Kingston 16GB DDR3 1600Mhz - KFA2 GTX 1070 EX @ EXOC bios - SanDisk Ultra II 480GB - EVGA 650GQ - Sony KDL-24EX320 - Logitech G502 & G933 - SteelSeries APEX M500 - W10 64bit |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:19.



















