Mọi người ơi cho em hỏi.Em đang làm bài tập viết chương trình quản lí sinh viên đến phần thêm sinh viên vào list thì bị lỗi như này:lúc tạo danh sách sinh viên thì vẫn bình thường,nhưng khi thêm 2 sinh viên trở lên là lại có 1 sinh viên được ghi 2 lần ạ 
Code hàm thêm sv đây ạ:
int sott;
struct{
char tensv[300];
int ngaysinh;
int thangsinh;
int namsinh;
int id;
};
void them(){
int add;
char ten[300];
printf("\nSo sinh vien muon them : ");
scanf("%d",&add);
while(1){
if(add>0){
int i=0;
struct svdetails sv[add-1];
int nam[add-1];
int thang[add-1];
int ngay[add-1];
for(i;i<add;i++){
printf("\nNhap ten sinh vien thu %d : ",i+1);
fflush(stdin);
gets(ten);
printf("\nNam sinh: ");
printf("\nNgay : ");
while(1){
if(scanf("%d",&ngay[i])==1){
if(ngay[i]<1||ngay[i]>31)printf("\nNgay sinh phai la tu 01-30\nNgay: ");
else if(ngay[i]>0&&ngay[i]<32)break;}}
printf("\nThang: ");
while(1){
if(scanf("%d",&thang[i])==1){
if(thang[i]<1||thang[i]>12)printf("\nThang sinh phai la tu 01-12\nThang: ");
else if(thang[i]>0&&thang[i]<13)break;}}
printf("\nNam : ");
while(1){
if(scanf("%d",&nam[i])==1){
if(nam[i]<1950||nam[i]>2020)printf("\nNam sinh phai la tu 1950-2020\nNam: ");
else if(nam[i]>1949&&ngay[i]<2021)break;}}
strcpy(sv[i].tensv,ten);
sv[i].ngaysinh=ngay[i];
sv[i].thangsinh=thang[i];
sv[i].namsinh=nam[i];
if(1950<=sv[i].namsinh&&sv[i].namsinh<2000){
sv[i].id=1000000+ngay[i]+thang[i]+nam[i]+i+1;
}
else if(2000<=sv[i].namsinh&&sv[i].namsinh<=2020){
sv[i].id=2000000+ngay[i]+thang[i]+nam[i]+i+1;
}
FILE *ghi;
ghi=fopen("data\\sinhvien.bin","ab");
fwrite(&sv,sizeof(struct svdetails),i+1,ghi);
fclose(ghi);
sott=sott+i+1;
FILE *stt;
stt=fopen("data\\stt.txt","w");
fprintf(stt,"%d",sott);
fclose(stt);
}
printf("da luu du lieu cua %i sinh vien",i);break;
}else if(add<1)printf("\nSo sinh vien it nhat la 1 !");them();
}
printf("\nLua chon: ");
}

.
. Miễn sao anh đừng nhờ giải bài tập hoặc không chịu search google là được.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?