ciao
avrei il seguente problema da risolvere

Una sala ricevimenti deve gestire i dati relativi al numero di invitati dei matrimoni che organizza
Le informazioni sono memorizzati in un file ("eventi.dat") che contiene strutture (variabile matrimonio) del tipo seguente:
COGNOME SPOSO | COGNOME SPOSA | DATA | NUMERO INVITATI
Si realizzi un programma che :
1. ordini in maniera decrescente i dati dei matrimoni in base al numero di invitati
2. consenta di ricavare il cognome degli sposi in base alla data del matrimonio ( si utilizzi l'algoritmo di ricerca dicotomica).
Tute le operazioni sui dati vanno fatte in memoria centrale dopo aver letto i dati da "eventi.dat" e trsferite successivamente sullo stesso file

Io ho fatto in questo modo però ho un dubbio riguardo alla struttura (variabile matrimonio), cioè non capisco se devo creare una struct nel file "eventi.dat"

codice:
#include <stdio.h>
#include <stdlib.h>
#define maxchar 20
#define N 10
/*
 *
 */
int main() {

    struct eventi{
        char sposo[maxchar];
        char sposa[maxchar];
        int dat;
        int invi;
    }evento[N];

    char cognomesposo[N];
    char cognomesposa[N];
    int data;
	int datacerca;
	int invitati;
	int i,j,k, appo;
    char buffer[N];

    FILE *cfPtr;

    if ((cfPtr = fopen ("eventi.dat", "w")) == NULL){
        printf ("il file non può essere aperto");

    }else{
        printf ("Inserisci i dati : \n");
        printf ("Inserisci EOF per terminare l'inserimento \n");
		printf ("\n\n%-10s%-10s%-10s%-10s\n", "SPOSO", "SPOSA", "DATA", "INVITATI");
        scanf ("%s%s%d%d", cognomesposo, cognomesposa, &data, &invitati);

        while (!feof(stdin)){
		fprintf (cfPtr, "%s %s %d %d\n", cognomesposo, cognomesposa, data, invitati);
        scanf ("%s\t%s\t%d\t%d\t", cognomesposo, cognomesposa, &data, &invitati);

        }

            fclose(cfPtr);
        }

    if ((cfPtr = fopen("eventi.dat", "r")) == NULL){
        printf("il file non può essere aperto");

    }else{

        i = 0;
        fscanf(cfPtr, "%s%s%d%d", cognomesposo, cognomesposa, &data, &invitati);

        strcpy(evento[i].sposo,cognomesposo);
        strcpy(evento[i].sposa,cognomesposa);
        evento[i].dat = data;
        evento[i].invi = invitati;
        i++;

        while (!feof(cfPtr)){

            const int aResult = fscanf(cfPtr, "%s%s%d%d", cognomesposo, cognomesposa, &data, &invitati);
			if (aResult != -1){
            strcpy(evento[i].sposo, cognomesposo);
            strcpy(evento[i].sposa, cognomesposa);
            evento[i].dat = data;
            evento[i].invi = invitati;
			i++;
			}
        }

    }

    for (j = 0; j < i - 1; j++){
        for (k = j + 1; k < i; k++){
            if (evento[j].invi < evento[k].invi){
                strcpy(buffer,evento[k].sposo);
                strcpy(evento[k].sposo,evento[j].sposo);
                strcpy(evento[j].sposo,buffer);
                strcpy(buffer,evento[k].sposa);
                strcpy(evento[k].sposa,evento[j].sposa);
                strcpy(evento[j].sposa,buffer);
                appo = evento[k].dat;
                evento[k].dat = evento[j].dat;
                evento[j].dat = appo;
                appo = evento[k].invi;
                evento[k].invi = evento[j].invi;
                evento[j].invi = appo;
            }
        }
    }

    printf ("\n\n%-10s%-10s%-10s%-10s", "SPOSO", "SPOSA", "DATA", "INVITATI");
    for (j = 0; j < i; j++){
        printf ("\n%-10s%-10s%-10d%-10d", evento[j].sposo, evento[j].sposa,evento[j].dat,evento[j].invi);
    }

	printf ("\n\nInserisci la data del matrimonio\n");
	scanf ("%d",&datacerca);

	for (j = 0; j < i; j++){
		if (datacerca == evento[j].dat){
			printf ("\n\n%-10s%-10s", "SPOSO", "SPOSA");
			printf ("\n%-10s%-10s", evento[j].sposo, evento[j].sposa);
			}
        }

	if ((cfPtr = fopen ("eventi.dat", "w")) == NULL){
        printf ("il file non può essere aperto");

    }else{
		for (j = 0; j < i; j++){
			strcpy(cognomesposo, evento[j].sposo);
			strcpy(cognomesposo, evento[j].sposo);
			data = evento[j].dat;
			invitati = evento[j].invi;
			fprintf (cfPtr, "%s %s %d %d\n", cognomesposo, cognomesposa, data, invitati);
			}
		fclose(cfPtr);
        }

	system("PAUSE");

    return 0;
}