Sorry for the language difference, thank you
In first I input data ( program to input data student , the teacher asked to use .txt )
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
void delete_n(char a[]){
    size_t x=strlen(a);
        if(a[strlen(a)-1]=='\n'){
            a[strlen(a)-1]='\0';
        }
}
struct age{
    char id[10];
    char name[50];
    int numb;
    int score;
};
void sx(age dnu[], int n){
    age a;
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(dnu[i].numb<dnu[j].numb){
                a=dnu[i];
                dnu[i]=dnu[j];
                dnu[j]=a;
            }
        }
    }
}
void file(age dnu[],int n){
    FILE *f;
    f = fopen("ex3","w");
    if(f==NULL){
        printf("Error");
        exit(0);
    }
    fprintf(f,"%d\n",n);    
    for(int i=0;i<n;i++){
        fprintf(f," %s\n",dnu[i].id);
        fprintf(f,"%s\n",dnu[i].name);
        fprintf(f," %d \n",dnu[i].numb);
        fprintf(f," %d \n",dnu[i].score);
    }
    fclose(f);
}
void out(age dnu[],int n){
    printf("%10s    %20s    %20s    %20s","Ma nganh","Ten nganh","So sinh vien ","Diem trung tuyen\n");
    for(int i=0;i<n;i++){
        printf("%10s    %20s    %20d    %20d",dnu[i].id,dnu[i].name,dnu[i].numb,dnu[i].score);
        printf("\n");
    }
}
int main(){
    age *dnu;
    int n;
    printf("Nhap so nganh hoc can quan ly  : ");
    scanf("%d",&n);
    dnu = (age*)malloc(n*sizeof(age));
    for(int i=0;i<n;i++){
        fflush(stdin);
        printf("Nhap ma nganh hoc : ");
        fgets(dnu[i].id,sizeof(dnu[i].id),stdin);
        delete_n(dnu[i].id);
        fflush(stdin);
        printf("Nhap ten nganh hoc : ");
        fgets(dnu[i].name,sizeof(dnu[i].name),stdin);
        delete_n(dnu[i].name);
        fflush(stdin);
        printf("Nhap so sinh vien : ");
        scanf("%d",&dnu[i].numb);
        printf("Nhap diem trung tuyen : ");
        scanf("%d",&dnu[i].score);
    }
    sx(dnu,n);
    out(dnu,n);
    file(dnu,n);
    free(dnu);
    
    
}
Then second program , i want output data student , but loop for only run 1 time then error
i thinks , my mistakes is fscanf(f,"%d",....) , I think fscanf is not a good choice ,
sorry again for the language difference ,
you don't have to pay attention to anything else , I just think the error is in the FILE section
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
struct age{
    char id[10];
    char name[50];
    int numb;
    int score;
};
int main(){
    age dnu[20];
    char x[50];
    int d;
    int n;
    FILE *f;
    f = fopen("ex3","r");
    if(f==NULL){
        printf("Error");
        exit(0);
    }
//  if( fgets(x,60,f)!=NULL){
//      puts(x);
//  }
    
    fscanf(f,"%d",&n);  
    for(int i=0;i<1;i++){
        fscanf(f," %s ",&dnu[i].id);
        fscanf(f," %s ",&dnu[i].name);
        fscanf(f,"%d",&dnu[i].numb);
        fscanf(f,"%d",&dnu[i].score);
    }
    printf("%10s    %20s    %20s    %20s","Ma nganh","Ten nganh","So sinh vien ","Diem trung tuyen\n");
    for(int i=0;i<n;i++){
        printf("%10s    %20s    %20d    %20d",dnu[i].id,dnu[i].name,dnu[i].numb,dnu[i].score);
        printf("\n");
    }
    fclose(f);
}
you can see images enter image description here
