Ciao, ho scritto queste righe di codice ma non fanno quello che avevo in mente.
codice:// FUNZIONE CANCELLA // int tmp_matricola; printf("Numero di matricola dello studente che vuoi cancellare dall'archivio: "); scanf("%d", &tmp_matricola); for(i = 0; i < MAX_STUD; i++) { if(ptrVettStud[i].matricola == tmp_matricola) { free(ptrVettStud); printf("Operazione avvenuta con successo!\n"); printf("Lo studente %s %s e' stato rimosso dall'archivio.\n", ptrVettStud[i].nome, ptrVettStud[i].cognome); } else { printf("Il numero di matricola non e' in elenco.\n"); } break; } printf("%d\n", ptrVettStud[0].matricola); printf("%d\n", ptrVettStud[1].matricola); printf("%d\n", ptrVettStud[2].matricola);
Ci sono(almeno) due cose che non vanno: quando stampa nome e cognome dello studente cancellato il nome lo traduce in numero, sempre il solito, un 5.
Seconda cosa, non riesco a fare la FREE sulla singola cella del vettore. I tre printf finali di verifica, nel caso inserissi tre nuove matricole, continuano a stampare anche quella eventualmente cancellata.
In partenza ho scritto "free(ptrVettStud[i])" ma lo segnala come incompatibile.
Questo sotto invece è come ho creato e allocato il vettore di strutture:
codice:typedef struct{ char nome[50]; char cognome[50]; int matricola; int voto[NUM_MAT]; } STUDENTE; STUDENTE *ptrVettStud; ... for(i = 0; i < MAX_STUD; i++) { ptrVettStud = (STUDENTE*) malloc(sizeof(STUDENTE)); }

Rispondi quotando
