Cần giúp sửa lỗi code đọc và ghi file trong C với cấu trúc struct

Bài em có các lỗi sau:

  1. Xuất ra file thì không xuất được hệ số lương(heSL)
  2. Khi đọc file văn bản rồi in ra thì in ra không đúng
  3. khi đọc file nhị phân rồi in ra thì ra linh tinh
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct NhanSu{ char maNV[20],hoTen[30],chucVu[30]; float heSL[5];
                      
};
void nhapNhanSu();
void xuatNhanSuFileText();
void xuatNhanSuFileBinary();
void docNhanSuFileText();
void docNhanSuFileBinary();
NhanSu ns[1000];
FILE *f;
int i,n;
void nhapNhanSu(){
	printf("Nhap so nhan su:"); scanf("%d",&n);
	printf("Nhap thong tin nhan su\n");
	for(i=1;i<=n;i++)
	{
		printf("\tNhap thong tin cho nhan su thu %d\n",i);
		printf("Ma nhan vien:"); fflush(stdin);
		gets (ns[i].maNV);
		printf("Ho va ten:");    fflush(stdin);
		gets (ns[i].hoTen);
		printf("Chuc vu:");      fflush (stdin);
		gets (ns[i].chucVu);
		printf("He so luong:");
		scanf("%f",&ns[i].heSL);
    }
}
void xuatNhanSuFileText(){
	f = fopen("NhanSu.txt","w");
	for(i=1;i<=n;i++)
	{
	  fprintf(f,"%s\n%s\n%s\n%.2f\n",ns[i].maNV,ns[i].hoTen,ns[i].chucVu,ns[i].heSL);
	}
	fclose(f);
 }
void xuatNhanSuFileBinary(){
	f = fopen("NhanSu.dat","wb");
	for(i=1;i<=n;i++)
	{
		fwrite(ns[i].maNV,sizeof(char),1,f);
		fwrite(ns[i].hoTen,sizeof(char),1,f);
		fwrite(ns[i].chucVu,sizeof(char),1,f);
		fwrite(ns[i].heSL,sizeof(float),1,f);
	}
	fclose(f);
 }
void docNhanSuFileText(){
	f = fopen("NhanSu.txt","r");
	fscanf(f,"%d",&n);
	printf("So nhan su:%d nguoi\n",n);
	for(i=1;i<=n;i++){
		fgets(ns[i].maNV,20,f);
		fgets(ns[i].hoTen,30,f);
		fgets(ns[i].chucVu,30,f);
		fscanf(f,"%.2f",&ns[i].heSL);
	}
	for(i=1;i<=n;i++){
		printf("\tNhan su thu %d\n",i);
		printf("Ma nhan vien:%s",ns[i].maNV);
		printf("Ho va ten:%s",ns[i].hoTen);
		printf("Chuc vu:%s",ns[i].chucVu);
		printf("He so luong:%.2f",ns[i].heSL);
		printf("\n");
	}
	printf("\n");	
}
void docNhanSuFileBinary(){
	f = fopen("NhanSu.dat","rb");
	fread(&n,sizeof(int),1,f);
	printf("So nhan su:%d nguoi\n",n);
	for(i=1;i<=n;i++){
		fread(&ns[i].maNV,sizeof(char),1,f);
		fread(&ns[i].hoTen,sizeof(char),1,f);
		fread(&ns[i].chucVu,sizeof(float),1,f);
		fread(&ns[i].heSL,sizeof(float),1,f);
	}
	for(i=1;i<=n;i++){
		printf("\tNhan su thu %d\n",i);
		printf("Ma nhan vien:%s",ns[i].maNV);
		printf("Ho va ten:%s",ns[i].hoTen);
		printf("Chuc vu:%s",ns[i].chucVu);
		printf("He so luong:%.2f",ns[i].heSL);
	}
	printf("\n");	
	
}
int main(){
	int chon,flag=0;
	do{
	printf("1.Nhap day nhan su tu ban phim\n");
	printf("2.Xuat day nhan su ra file van ban\n");
	printf("3.Xuat day nhan su ra file nhi phan\n");
	printf("4.Doc day nhan su tu file van ban xuat ra man hinh\n");
	printf("5.Doc day nhan su tu file nhi phan xuat ra man hinh\n");
	printf("6.Thoat\n");
	printf("Ban chon:"); scanf("%d",&chon);
	if(chon==1){
		nhapNhanSu();
		flag=1;
	}
	if(chon==2){
		if(flag==1) xuatNhanSuFileText();
		else printf("Moi ban chon muc 1 truoc\n");
	}
	if(chon==3){
		if(flag==1) xuatNhanSuFileBinary();
		else printf("Moi ban chon muc 1 truoc\n");
	}
	if(chon==4){
		if(flag==1) docNhanSuFileText();
		else printf("Moi ban chon muc 1 truoc\n");
	}
	if(chon==5){
		if(flag==1) docNhanSuFileBinary();
		else printf("Moi ban chon muc 1 truoc\n");
	}
  }while(chon!=6);
}

Co mot so cho khong dung. Minh co sua 1 so cho ban xem lai

#include<stdio.h>
#include<stdlib.h>
//#include<conio.h>

typedef struct NhanSu {
  char maNV[20],hoTen[30],chucVu[30];
  float heSL;                      
} nhansu;

void nhapNhanSu();
void xuatNhanSuFileText();
void xuatNhanSuFileBinary();
void docNhanSuFileText();
void docNhanSuFileBinary();
struct NhanSu ns[1000];
FILE *f;
int i,n;
void nhapNhanSu(){
  printf("Nhap so nhan su:"); scanf("%d",&n);
  printf("Nhap thong tin nhan su\n");
  for(i=1;i<=n;i++)
  {
    printf("\tNhap thong tin cho nhan su thu %d\n",i);
    printf("Ma nhan vien:"); fflush(stdin);
    scanf("%s", ns[i].maNV);
    printf("Ho va ten:");    fflush(stdin);
    scanf("%s",ns[i].hoTen);
    printf("Chuc vu:");      fflush (stdin);
    scanf("%s", ns[i].chucVu);
    printf("He so luong:");
    scanf("%f",&(ns[i].heSL));
  }
}
void xuatNhanSuFileText(){
  f = fopen("NhanSu.txt","w");
  for(i=1;i<=n;i++)
  {
    fprintf(f,"%s\n%s\n%s\n%.2f\n",ns[i].maNV,ns[i].hoTen,ns[i].chucVu,ns[i].heSL);
  }
  fclose(f);
 }
void xuatNhanSuFileBinary(){
  f = fopen("NhanSu.dat","wb");
  for(i=1;i<=n;i++)
  {
    fwrite(ns[i].maNV,sizeof(ns[i].maNV),1,f);
    fwrite(ns[i].hoTen,sizeof(ns[i].hoTen),1,f);
    fwrite(ns[i].chucVu,sizeof(ns[i].chucVu),1,f);
    fwrite(&(ns[i].heSL),sizeof(float),1,f);
  }
  fclose(f);
 }
void docNhanSuFileText(){
  f = fopen("NhanSu.txt","r");
  fscanf(f,"%d",&n);
  printf("So nhan su:%d nguoi\n",n);
  for(i=1;i<=n;i++){
    fgets(ns[i].maNV,20,f);
    fgets(ns[i].hoTen,30,f);
    fgets(ns[i].chucVu,30,f);
    fscanf(f,"%f",&ns[i].heSL);
  }
  for(i=1;i<=n;i++){
    printf("\tNhan su thu %d\n",i);
    printf("Ma nhan vien:%s",ns[i].maNV);
    printf("Ho va ten:%s",ns[i].hoTen);
    printf("Chuc vu:%s",ns[i].chucVu);
    printf("He so luong:%.2f",ns[i].heSL);
    printf("\n");
  }
  printf("\n"); 
}
void docNhanSuFileBinary(){
  f = fopen("NhanSu.dat","rb");
  fread(&n,sizeof(int),1,f);
  printf("So nhan su:%d nguoi\n",n);
  for(i=1;i<=n;i++){
    fread(ns[i].maNV,sizeof(ns[i].maNV),1,f);
    fread(ns[i].hoTen,sizeof(ns[i].hoTen),1,f);
    fread(ns[i].chucVu,sizeof(ns[i].chucVu),1,f);
    fread(&ns[i].heSL,sizeof(float),1,f);
  }
  for(i=1;i<=n;i++){
    printf("\tNhan su thu %d\n",i);
    printf("Ma nhan vien:%s",ns[i].maNV);
    printf("Ho va ten:%s",ns[i].hoTen);
    printf("Chuc vu:%s",ns[i].chucVu);
    printf("He so luong:%.2f",ns[i].heSL);
  }
  printf("\n"); 
  
}
int main(){
  int chon,flag=0;
  do{
  printf("1.Nhap day nhan su tu ban phim\n");
  printf("2.Xuat day nhan su ra file van ban\n");
  printf("3.Xuat day nhan su ra file nhi phan\n");
  printf("4.Doc day nhan su tu file van ban xuat ra man hinh\n");
  printf("5.Doc day nhan su tu file nhi phan xuat ra man hinh\n");
  printf("6.Thoat\n");
  printf("Ban chon:"); scanf("%d",&chon);
  if(chon==1){
    nhapNhanSu();
    flag=1;
  }
  if(chon==2){
    if(flag==1) xuatNhanSuFileText();
    else printf("Moi ban chon muc 1 truoc\n");
  }
  if(chon==3){
    if(flag==1) xuatNhanSuFileBinary();
    else printf("Moi ban chon muc 1 truoc\n");
  }
  if(chon==4){
    if(flag==1) docNhanSuFileText();
    else printf("Moi ban chon muc 1 truoc\n");
  }
  if(chon==5){
    if(flag==1) docNhanSuFileBinary();
    else printf("Moi ban chon muc 1 truoc\n");
  }
  }while(chon!=6);
}


Bạn ơi lúc đọc nó bị chạy loạn hết lên ấy.Bạn xem lại hộ mình với.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?