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));
}