#include<stdio.h>
#include<stdlib.h>
typedef struct
{
long ID,Class,Date;
char Name[20];
char gender[20];
int chinese,math,english,total;
}student;
student s[2000];
int num=0;
void add()
{
char ch,k[80];
FILE *fp;
fp=fopen("sudent.txt","a+");
if(!fp)
{
printf("file connot be opened");
exit(1);
}
printf("输入学生数据\n");
while(1)
{
printf("学号\n");
gets(k);
s[num].ID=atol(k);
printf("姓名\n");
gets(s[num].Name);
printf("性别\n");
gets(s[num].gender);
printf("班级\n");
gets(k);
s[num].Class=atol(k);
num++;
fwrite(&s[num],sizeof(s),num,fp);
printf("another(y/n)?");
ch=getchar();
if(ch=='n')
break;
gets(k);
fflush(stdin);
}
fclose(fp);
}
void main()
{
add();
}

解决方案 »

  1.   

    num++;
    fwrite(&s[num],sizeof(s),num,fp);应该
    fwrite(&s[num],sizeof(s),num,fp);
    num++;
      

  2.   

    每次录入前数据有没有清空?
    你申请的
    char Name[20];
    char gender[20];
    只有20个数据区域,
    如果不清空,录入几次就会超过20的区域范围
      

  3.   

    你自己Debug单步调试一下看看,各个参数的值是否正确?
      

  4.   


    typedef struct
    {
        long ID,Class,Date;
        char Name[20];
        char gender[20];
        int chinese,math,english,total;
    }student;
    student s[2000];
    int num=0;
    void add()
    {
        char ch,k[80];
        FILE *fp;
        fp=fopen("sudent.txt","a+");
        if(!fp)
        {
            printf("file connot be opened");
            exit(1);
        }
        printf("输入学生数据\n");
        while(1)
        {
            printf("学号\n");
            gets(k);
            s[num].ID=atol(k);
            printf("姓名\n");
            gets(s[num].Name);
            printf("性别\n");
            gets(s[num].gender);
            printf("班级\n");
            gets(k);
            s[num].Class=atol(k);
            fwrite(&s[num],sizeof(student),num,fp);
            num++;
            printf("another(y/n)?");
            ch=getchar();
            if(ch=='n') break;
            fflush(stdin);
        }
        fclose(fp);
    }
    void main()
    {
        add();
    }注意
            fwrite(&s[num],sizeof(student),num,fp);
            num++;

      

  5.   

    int len=sizeof(s);// 136000
    len=sizeof(student);// 68
    道理上
    fwrite(&s[num],sizeof(s),num+1,fp);
    只有 num ==0