Inserimento Ordinato

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:

  1. finchè esistono dati da inserire
    1. utilizza la funzione “insert_into”
  2. alla fine termina l’esecuzione
//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;
}

Inserimento ordinato: insert_into

In generale dobbiamo utilizzare il metodo del file temporaneo per aggiornare il file originale in modo consistente: