Utilizziamo un campo per inserire i dati nel file in maniera ordinata (per il nostro esempio usiamo la matricola)
Ogni volta che si inserisce una riga:
Costruiamo una funzione che si occupi dell’inserimento della riga nel file:
int insert_into(char *matricola, char *nome, double media_voti);
La procedura generale può essere strutturata nel modo seguente:
//inserimento ordinato in un file
#include <stdio.h>
//dichiarazione della funzione di inserimento
int insert_into(char *matricola, char *nome, double media_voti);
int main()
{
char matricola[30]; //numero di matricola
char nome[50]; //nominativo
double media_voti; //media dei voti
printf("Inserisci la matricola, il nome e la media dei voti di uno studente\\n");
printf("Inserisci EOF per concludere l'inserimento del dati\\n");
printf("? ");
scanf("%s%s%lf", matricola, nome, &media_voti);
//richiama la funzione per scrivere nel file
while (!feof(stdin))
{
insert_into(matricola, nome, media_voti);
printf("? ");
scanf("%s%s%lf", matricola, nome, &media_voti);
}
return 0;
}
Possiamo arricchire la procedura generale per mostrare il successo/insuccesso di ogni inserimento:
//inserimento ordinato in un file
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//dichiarazione della funzione di inserimento
int insert_into(char *matricola, char *nome, double media_voti);
int main()
{
char matricola[30];
char nome[50];
double media_voti;
int res = -1;
printf("Inserisci la matricola, il nome e la media dei voti di uno studente\\n");
printf("Inserisci EOF per concludere l'inserimento del dati\\n");
printf("? ");
scanf("%s %s %lg", matricola, nome, &media_voti);
while (!feof(stdin))
{
res = insert_into(matricola, nome, media_voti);
if (res == 0)
{
printf("? Studente %s inserito con successo\\n", nome);
}
else
{
printf("? Studente %s NON inserito\\n", nome);
}
printf("? ");
scanf("%s %s %lg", matricola, nome, &media_voti);
}
return 0;
}
In generale dobbiamo utilizzare il metodo del file temporaneo per aggiornare il file originale in modo consistente: