scusate sono stato sinora a cercare l'errore ma non ci sono riuscito
ho trovato qualcosa che non andava tipo la definizione del numero di elementi della struct..ma non va uguale..ecco l'ultimo che ho fatto

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

	struct studenti {
		int ordi;
		char cogno[20];
		int vot;
	}studente[n];

    int ordine;
    char cognome[20];
    int voto;

	int i = 0;


    FILE *cfPtr; /*cfPtr = punta al file ingresso.txt*/

    /*fopen apre il file*/
    if ((cfPtr = fopen("ingresso.txt", "w")) == NULL){
        printf ("Il file non può essere aperto");
    }

    else{
        printf ("Inserisci ordine, cognome, ed il voto : \n");
        printf ("Inserisci EOF per terminare l'inserimento \n");
        scanf ("%d%s%d", &ordine, cognome, &voto);

        /*scrive nel file*/

        while (!feof(stdin)){
            fprintf (cfPtr, "%d %s %d\n", ordine, cognome, voto);
            scanf ("%d%s%d", &ordine, cognome, &voto);
        }

         fclose(cfPtr);

        }





    /*fopen apre il file*/
    if ((cfPtr = fopen("ingresso.txt", "r")) == NULL){
        printf ("Il file non può essere aperto");
    }
    else{
        printf ("%15s%15s%15s","Ordine","Cognome","Voto\n");
        fscanf (cfPtr, "%d%s%d", &ordine, cognome, &voto);
        studente[i].ordi = ordine;
		strcpy(studente[i].cogno,cognome);
		studente[i].vot = voto;
		i++;

    while (!feof(cfPtr)){
            printf ("%15d%15s%14d\n", ordine, cognome, voto);
            fscanf (cfPtr, "%d%s%d", &ordine, cognome, &voto);

				studente[i].ordi = ordine;
		        strcpy(studente[i].cogno,cognome);
		        studente[i].vot = voto;
				i++;
      
           }
        }

     printf ("\nStampa ordinata\n");
    printf ("%25s%25s%30s\n","ORDINE,"COGNOME","VOTO");
     for (i = 0; i < n; i++){
         printf ("%25s%25s%30d", studente[i].ordi, studente[i].cogno, studente[i].vot);
     }




    fclose(cfPtr);
    system("PAUSE");




    return 0;
    
}