Sto scrivendo un programma di esercizio tratto dal libro "Linguaggio C" di Bellini e Guidi, edito dalla Mc, lo cito in quanto qualcuno magari lo ha già letto, sono al capitolo 13, "File".
Si tratta di un programma "rubrica" che usufruisce di funzioni di inserimento dei nominativi, ricerca, modifica, cancellazione, ecc. appoggiandosi su di un file che io ho chiamato "rubrica.dat", ma arriviamo al problema (di cui non ho trovato la soluzione in quanto ci sono le soluzioni di molti esercizi ma non di tutti, ed è il caso di questo):
Quando utilizzo la funzione per cancellare un nominativo mi conserva uno spazio nel file che viene visto poi dai programmi di visualizzazione, ad esempio se ho i dati del sig Bianchi, del sig Rossi e del sig Neri, cancello il sig Rossi, in una visualizzazione completa vedrò in sequenza il sig Bianchi, una schermata con i campi dei dati (Cognome, Nome, Indir., ecc.) vuoti (dove c'era il sig Rossi che ho cancellato) e il sig Neri.
Questo non mi succedeva quando nella struct avevo pochi membri (cognome, nome, numero di telefono), cioè in un esempio come sopra avrei visto in sequenza il sig Bianchi e il sig Neri senza avere lo spazio vuoto.
Spero di essere stato sufficientemente chiaro, per maggior completezza posto di seguito la funzione di cancellazione:
void elimina(long pos) {
strncpy(rubrica.cognome, "", NN);
strncpy(rubrica.nome, "", NN);
strncpy(rubrica.numero, "", TN);
strncpy(rubrica.defin_via, "", TN);
strncpy(rubrica.via, "", NN);
strncpy(rubrica.num_civ, "", CN);
strncpy(rubrica.cap, "", CN);
strncpy(rubrica.citta, "", NN);
strncpy(rubrica.provincia, "", NN);
strncpy(rubrica.stato, "", NN);
fp = fopen("rubrica.dat", "r+");
fseek(fp, pos, 0);
fwrite(&rubrica, sizeof(Archivio), 1, fp);
fclose(fp);
return;
}
Come vedete è abbastanza semplice, "Archivio" è il typedef della struct.
Tra l'altro ho applicato i consigli di usare "strncpy" al posto di "strcpy", meglio abituarsi
L'unico parametro è "pos" che mi arriva da una funzione di ricerca del nominativo.
Il resto dovrebbe essere abbastanza comprensibile, "rubrica" e il puntatore al file "fp" sono dichiarati globalmente, comunque a parte l'uso di "strncpy" al posto di "strcpy" la funzione è perfettamente simile a quanto riportato dal libro![]()
Grazie in anticipo![]()