Ho rifatto l'algoritmo di ordinamento utilizzando il selection sort
codice:
#include <stdio.h>
#include <stdlib.h>
#define n 10

struct matrimonio {
        char Cognome_Sposo[15];
        char Cognome_Sposa[15];
        int Data;
        int Invitati;
}matri[n];

int main()
{
    char sposo[15];
    char sposa[15];
    int data;
    int invitati;
    int j, k;
    int i = 0;
    char app[15];
    int appo;

    FILE *cfPtr;   /* puntatore al file eventi.dat */

    /* fopen apre il file in lettura/scrittura; se non riesce ad aprirlo provoca l'uscita dal programma */

    if (( cfPtr = fopen("eventi.dat", "w")) == NULL ) {
            printf("Il file non può essere aperto.\n");
    } else {
        printf("Inserisci il cognome dello sposo, il cognome della sposa, la data e il numero di invitati : \n");
        printf("Inserisci EOF per terminare l'inserimento \n");
        scanf("%s%s%d%d", sposo, sposa, &data, &invitati );


        /* scrive i dati nel file con fprintf */

        while (!feof(stdin)) {      /* stdin punta al file e la funzione feof controlla l'impostazione di EOF */
            fprintf(cfPtr, "%s %s %d %d\n", sposo, sposa, data, invitati);
            scanf("%s%s%d%d", sposo, sposa, &data, &invitati);
        } /* end while */

        fclose(cfPtr);

    } /* end else */

    /* fopen apre il file in lettura; se non riesce ad aprire il file provoca l'uscita dal programma */

    if (( cfPtr = fopen("eventi.dat", "r")) == NULL ) {
        printf("Il file non può essere aperto \n");
    } else {

        fscanf(cfPtr, "%s %s %d %d", sposo, sposa, &data, &invitati);
        strcpy(matri[i].Cognome_Sposo, sposo);
        strcpy(matri[i].Cognome_Sposa, sposa);
        matri[i].Data = data;
        matri[i].Invitati = invitati;
        while (!feof(cfPtr)) {
            i++;
            fscanf(cfPtr, "%s %s %d %d", sposo, sposa, &data, &invitati);
            strcpy(matri[i].Cognome_Sposo, sposo);
            strcpy(matri[i].Cognome_Sposa, sposa);
            matri[i].Data = data;
            matri[i].Invitati = invitati;
        } /* end while */

     fclose(cfPtr);
    } /* end else */
    printf("%15s%15s%6s%18s", "COGNOME SPOSO", "COGNOME SPOSA", "DATA", "NUMERO INVITATI\n");
    for ( j = 0; j < i; j++ ) {
        printf("%15s%15s%6d%18d", matri[j].Cognome_Sposo, matri[j].Cognome_Sposa, matri[j].Data, matri[j].Invitati);
        printf("\n");
    }

    for ( j = 0; j < i - 1 ; j++ ) {
        for ( k = i + 1; k < i; k++ ) {
            if (matri[j].Invitati < matri[k].Invitati ) {
                strcpy(app, matri[j].Cognome_Sposo);
                strcpy(matri[j].Cognome_Sposo, matri[k].Cognome_Sposo);
                strcpy(matri[k].Cognome_Sposo, app);
                strcpy(app, matri[j].Cognome_Sposa);
                strcpy(matri[j].Cognome_Sposa, matri[k].Cognome_Sposa);
                strcpy(matri[k].Cognome_Sposa, app);
                appo = matri[j].Data;
                matri[j].Data = matri[k].Data;
                matri[k].Data = appo;
                appo = matri[j].Invitati;
                matri[j].Invitati = matri[k].Invitati;
                matri[k].Invitati = appo;
            }
        }
    }
printf("%d", i);
printf("%d", j);
    printf("\nMATRIMONI ORDINATI IN SENSO DECRESCENTE IN BASE AL NUMERO DI IVNITATI\n");
    printf("%15s%15s%6s%18s", "COGNOME SPOSO", "COGNOME SPOSA", "DATA", "NUMERO INVITATI\n");
    for ( j = 0; j < i; j++ ) {
        printf("%15s%15s%6d%18d", matri[j].Cognome_Sposo, matri[j].Cognome_Sposa, matri[j].Data, matri[j].Invitati);
        printf("\n");
    }


    return 0;
}
Qualcuno sa dirmi perchè mi stampa la struttura senza ordinarmela..non riesco proprio a capire questa cosa.
Faccio eseguire l'algoritmo di ordinamento ma quando vado a stampare non mi ha ordinato proprio nulla!!!!!!