kjwyzz 2021-05-29 20:48 采纳率: 85.7%
浏览 47
已采纳

read函数是要将文件中已存的信息存到一个数组中并显示,怎么写?求大神指点!

#include <stdio.h>
#include <string.h>
#include<stdlib.h>
struct Student
{
    int num;
    char name[20];
    int  age;
    char sex;
    struct birth
    {
        int year;
        int month;
        int day;
    } birthday;
    char address[50];
    char tel[12];
    char Email[20];
} stu,stu1,stu2;
int static k=-1;
void insert(struct Student *stu,int N)
{
    int i;
    printf("请根据提示按照格式录入信息!\n");
    printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n");
    for(i=0; i<N; i++)
        scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,&stu[i].sex,&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
    system("pause");
}
void disp(struct Student *stu,int N)
{

    int i;
    for(i=0; i<N; i++)
        printf("%d %s %d %c %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
    system("pause");
}
void find(struct Student *stu,int N)
{
    int i,n,flag=0,xh;
    char name[20];
    printf("请输入想要查询的方式:1 :按学号查找 2:按姓名查找\n");
    scanf("%d",&n);

    if(n==1)
    {
        printf("请输入要查找的学号:");
        scanf("%d",&xh);

        for(i=0; i<N; i++)
            if(xh==stu[i].num)
            {
                flag = 1;
                printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n");
                printf("--------------------------------------------------------------------\n");
                printf("%d %s %d %c %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
            }
        if (0 == flag)
            printf("该学号不存在!\n");
    }

    else if(n==2)
    {
        printf("请输入要查找的姓名:");
        scanf("%s",name);
        for(i=0; i<N; i++)
            if(strcmp(name,stu[i].name)==0)
            {
                flag = 1;
                printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n");
                printf("--------------------------------------------------------------------\n");
                printf("%d %s %d %c %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
            }
        if (0 == flag)
            printf("该姓名不存在!\n");

    }

    else
        printf("NULL!");
    system("pause");


}

void modify( struct Student *stu,int N)
{
    int i, choice, num=-1,xh,flag=0;
    int year,month,day;
    char sex, name[20],tel[20], add[20],mail[20];
    printf("请输入要要修改的学生的学号:\n");
    scanf("%d", &xh);
    for (i=0;i<N;i++)
    {
        num=i;
        if (stu[i].num==xh)
        {
            printf("------------------\n");
            printf("1.修改姓名\n");
            printf("2.修改年龄\n");
            printf("3.修改性别\n");
            printf("4.修改出生年份\n");
            printf("5.修改出生月份\n");
            printf("6.修改出生日\n");
            printf("7.修改地址\n");
            printf("8.修改电话号码\n");
            printf("9.修改邮箱\n");
            printf("10.修改完成!\n");
            while (flag==0)
            {
                printf("请选择:");
                scanf("%d", &choice);
                switch (choice)
                {
                case 1:
                    printf("请输入新的姓名:\n");
                    scanf("%s", name);
                    strcpy(stu[num].name, name);
                    break;
                case 2:
                    printf("请输入新的年龄:\n");
                    scanf("%d", &stu[num].age);
                    break;
                case 3:
                    printf("请输入新的性别:\n");
                    fflush(stdin);
                    scanf("%c", &sex);
                    stu[i].sex = sex;
                    break;
                case 4:
                    printf("请输入新的出生年份:\n");
                    scanf("%d", &year);
                    stu[num].birthday.year = year;
                    break;
                case 5:
                    printf("请输入新的出生月份:\n");
                    scanf("%d", &month);
                    stu[num].birthday.month = month;
                    break;
                case 6:
                    printf("请输入新的出生日:\n");
                    scanf("%d", &day);
                    stu[num].birthday.day = day;
                    break;
                case 7:
                    printf("请输入新的地址:\n");
                    scanf("%s", &add);
                    strcpy(stu[num].address, add);
                    break;
                case 8:
                    printf("请输入新的电话号码:\n");
                    scanf("%s", &tel);
                    strcpy(stu[num].tel, tel);
                    break;
                case 9:
                    printf("请输入新的邮箱:\n");
                    scanf("%s", &mail);
                    strcpy(stu[num].Email, mail);
                    break;
                case 10:
                    flag=1;
                default:
                    printf("请在1-9之间选择\n");
                }

               //2getchar();
            }
            printf("修改完毕!请及时保存!\n");
        }

    }
    system("pause");
}
void del(struct Student *stu,struct Student *stu1,int *N)
{
    FILE *fp1;
    fp1=fopen("d:\\ccccc\\stu1.txt","a+");
    int i,j,flag=0,xh;
    char s1[20];
    printf("请输入要删除学生的学号:\n");
    scanf("%d", &xh);
    for (i = 0; i <*N; i++)
    {
        if (xh==stu[i].num)
        {
            k++;
            stu1[k]=stu[i];


            fprintf(fp1,"%d %s %d %c %d %d %d %s %s %s\n",stu1[k].num,stu1[k].name,stu1[k].age,stu1[k].sex,stu1[k].birthday.year,stu1[k].birthday.month,stu1[k].birthday.day,stu1[k].address,stu1[k].tel,stu1[k].Email);
            fclose(fp1);
            flag = 1;
            for (j = i; j <(*N); j++)
            {
                stu[j] = stu[j + 1];
            }
            break;
        }
    }
    if (flag==0)
    {
        printf("该学号不存在!\n");
    }
    if (flag==1)
    {
        printf("成功将该学生信息删除,并保留在stu1文档中!\n");

        (*N)--;
    }
    system("pause");
}
void add(struct Student *stu,int *N)
{
    int i,m,j,flag,k;
    k=(*N);
    printf("请输入待增加的学生数:\n");
    scanf("%d", &m);
    for(i=0; i<m; i++)
    {
        printf("请依次输入第%d位同学的信息:\n",k+1);
        printf("学生学号  学生姓名  年龄  性别  出生年份  出生月份  出生日  地址  电话号码  邮箱\n");
        scanf("%d%s%d%s%d%d%d%s%s%s",&stu[(*N)+i].num,stu[(*N)+i].name,&stu[(*N)+i].age,&stu[(*N)+i].sex,&stu[(*N)+i].birthday.year,&stu[(*N)+i].birthday.month,&stu[(*N)+i].birthday.day,stu[(*N)+i].address,stu[(*N)+i].tel,stu[(*N)+i].Email);
        k++;
    }
    printf("学生信息添加成功!\n");

    (*N)=(*N)+m;
    system("pause");
}
void writeintofile(struct Student *stu,int N)
{
    FILE *fp;
    fp=fopen("d:\\ccccc\\stu.txt","a+");
    for(int i=0; i<N; i++)
        fprintf(fp,"%d %s %d %c %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
    fclose(fp);
    printf("成功将学生信息写入文件stu中!\n");
    system("pause");
}
void read (struct Student *stu2,int *N)
{
    int i,j;
    int count=0;
    int sumrow;
    FILE *fp;
    fp=fopen("d:\\ccccc\\stu.txt","r");
    if(fp==NULL)
    {
        printf("File cannot open! " );
    }

while(!feof(fp))
  {

      count++;
  }
  sumrow = count+1;
  (*N)=(*N)+sumrow;
  printf("文件行数为:%d",sumrow);
  printf("\n");
for(i=0;i<sumrow;i++)
    fscanf(fp,"%[^\n]%d%s%d%s%d%d%d%s%s%s",&stu2[i].num,stu2[i].name,&stu2[i].age,&stu2[i].sex,&stu2[i].birthday.year,&stu2[i].birthday.month,&stu2[i].birthday.day,stu2[i].address,stu2[i].tel,stu2[i].Email);
    printf("文件内容为\n");
for (i=0;i<sumrow;i++)
    printf("%d %s %d %c %d %d %d %s %s %s\n",stu2[i].num,stu2[i].name,stu2[i].age,stu2[i].sex,stu2[i].birthday.year,stu2[i].birthday.month,stu2[i].birthday.day,stu2[i].address,stu2[i].tel,stu2[i].Email);
fclose(fp);
}

int main()
{
    int num,flag=1,N;
    printf("请输入要录入的学生信息个数\n");
    scanf("%d",&N);
    struct Student stu[1000];
    struct Student stu1[1000];
     struct Student stu2[1000];
    printf("                   学生信息管理系统                  \n");
    printf("*******************   功能菜单   ********************\n");
    printf("     ----------------------   ---------------------- \n");
    printf("        1.录入学生信息         2.浏览当前信息        \n");
    printf("     *********************************************   \n");
    printf("     *  3.查询学生信息         4.修改学生信息        \n");
    printf("     *********************************************   \n");
    printf("     *  5.删除学生信息         6 增添学生信息        \n");
    printf("     ********************** **********************   \n");
    printf("     *7.将信息写入文件中       8.退出程序            \n");
    printf("     ----------------------   ---------------------- \n");
    while (flag!=0)
    {

        printf("请选择想要完成的功能:\n");
        scanf("%d", &num);
        switch (num)
        {
        case 1:
            insert(stu,N);
            break;
        case 2:
            disp(stu,N);
            break;
        case 3:
            find(stu,N);
            break;
        case 4:
            modify(stu, N);
            break;
        case 5:
            del(stu,stu1, &N);
            break;
        case 6:
            add(stu,&N);
            break;
        case 7:
            writeintofile(stu,N);
            break;
        case 8:
            read(stu2,N);
            break;
        case 9:
            flag=0;
            printf("即将退出程序!");
        }
    }
    return 0;
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-05-29 22:29
    关注

    文件读入修改如下,修改处见注释。删除函数void del(struct Student *stu,struct Student *stu1,int *N)里面有对文件的操作,感觉不是很妥当,没做修改这里提醒下。供参考:

    #include <stdio.h>
    #include <string.h>
    #include<stdlib.h>
    
    struct Student
    {
        int num;
        char name[20];
        int  age;
        char sex;
        struct birth
        {
            int year;
            int month;
            int day;
        } birthday;
        char address[50];
        char tel[12];
        char Email[20];
    };            //stu,stu1,stu2; 这里定义的多余
    
    int static k=-1;
    
    void insert(struct Student *stu,int N)
    {
        int i;
        printf("请根据提示按照格式录入信息!\n");
        printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n");
        for(i=0; i<N; i++)
            scanf("%d%s%d%s%d%d%d%s%s%s",
                   &stu[i].num,stu[i].name,&stu[i].age,&stu[i].sex,&stu[i].birthday.year,
                   &stu[i].birthday.month,&stu[i].birthday.day,stu[i].address,stu[i].tel,
                   stu[i].Email);
        system("pause");
    }
    
    void disp(struct Student *stu,int N)
    {
        int i;
        for(i=0; i<N; i++)
            printf("%d %s %d %c %d %d %d %s %s %s\n",
                    stu[i].num,stu[i].name,stu[i].age,stu[i].sex,
                    stu[i].birthday.year,stu[i].birthday.month,
                    stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
        system("pause");
    }
    
    void find(struct Student *stu,int N)
    {
        int i,n,flag=0,xh;
        char name[20];
        printf("请输入想要查询的方式:1 :按学号查找 2:按姓名查找\n");
        scanf("%d",&n);
    
        if(n==1)
        {
            printf("请输入要查找的学号:");
            scanf("%d",&xh);
    
            for(i=0; i<N; i++)
                if(xh==stu[i].num)
                {
                    flag = 1;
                    printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n");
                    printf("--------------------------------------------------------------------\n");
                    printf("%d %s %d %c %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,
                                           stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,
                                                             stu[i].address,stu[i].tel,stu[i].Email);
                }
            if (0 == flag)
                printf("该学号不存在!\n");
        }
    
        else if(n==2)
        {
            printf("请输入要查找的姓名:");
            scanf("%s",name);
            for(i=0; i<N; i++)
                if(strcmp(name,stu[i].name)==0)
                {
                    flag = 1;
                    printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n");
                    printf("--------------------------------------------------------------------\n");
                    printf("%d %s %d %c %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,
                                                             stu[i].birthday.year,stu[i].birthday.month,
                                               stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
                }
            if (0 == flag)
                printf("该姓名不存在!\n");
    
        }
    
        else
            printf("NULL!");
        system("pause");
    }
    
    void modify( struct Student *stu,int N)
    {
        int i, choice, num=-1,xh,flag=0;
        int year,month,day;
        char sex, name[20],tel[20], add[20],mail[20];
        printf("请输入要要修改的学生的学号:\n");
        scanf("%d", &xh);
        for (i=0;i<N;i++)
        {
            num=i;
            if (stu[i].num==xh)
            {
                printf("------------------\n");
                printf("1.修改姓名\n");
                printf("2.修改年龄\n");
                printf("3.修改性别\n");
                printf("4.修改出生年份\n");
                printf("5.修改出生月份\n");
                printf("6.修改出生日\n");
                printf("7.修改地址\n");
                printf("8.修改电话号码\n");
                printf("9.修改邮箱\n");
                printf("10.修改完成!\n");
                while (flag==0)
                {
                    printf("请选择:");
                    scanf("%d", &choice);
                    switch (choice)
                    {
                    case 1:
                        printf("请输入新的姓名:\n");
                        scanf("%s", name);
                        strcpy(stu[num].name, name);
                        break;
                    case 2:
                        printf("请输入新的年龄:\n");
                        scanf("%d", &stu[num].age);
                        break;
                    case 3:
                        printf("请输入新的性别:\n");
                        fflush(stdin);
                        scanf("%c", &sex);
                        stu[i].sex = sex;
                        break;
                    case 4:
                        printf("请输入新的出生年份:\n");
                        scanf("%d", &year);
                        stu[num].birthday.year = year;
                        break;
                    case 5:
                        printf("请输入新的出生月份:\n");
                        scanf("%d", &month);
                        stu[num].birthday.month = month;
                        break;
                    case 6:
                        printf("请输入新的出生日:\n");
                        scanf("%d", &day);
                        stu[num].birthday.day = day;
                        break;
                    case 7:
                        printf("请输入新的地址:\n");
                        scanf("%s", &add);
                        strcpy(stu[num].address, add);
                        break;
                    case 8:
                        printf("请输入新的电话号码:\n");
                        scanf("%s", &tel);
                        strcpy(stu[num].tel, tel);
                        break;
                    case 9:
                        printf("请输入新的邮箱:\n");
                        scanf("%s", &mail);
                        strcpy(stu[num].Email, mail);
                        break;
                    case 10:
                        flag=1;
                    default:
                        printf("请在1-9之间选择\n");
                    }
    
                   //2getchar();
                }
                printf("修改完毕!请及时保存!\n");
            }
    
        }
        system("pause");
    }
    void del(struct Student *stu,struct Student *stu1,int *N)
    {
        FILE *fp1;
        fp1=fopen("d:\\ccccc\\stu1.txt","a+");
        int i,j,flag=0,xh;
        char s1[20];
        printf("请输入要删除学生的学号:\n");
        scanf("%d", &xh);
        for (i = 0; i <*N; i++)
        {
            if (xh==stu[i].num)
            {
                k++;
                stu1[k]=stu[i];
                fprintf(fp1,"%d %s %d %c %d %d %d %s %s %s\n",
                            stu1[k].num,stu1[k].name,stu1[k].age,stu1[k].sex,
                            stu1[k].birthday.year,stu1[k].birthday.month,stu1[k].birthday.day,
                            stu1[k].address,stu1[k].tel,stu1[k].Email);
                fclose(fp1);
                flag = 1;
                for (j = i; j <(*N); j++)
                {
                    stu[j] = stu[j + 1];
                }
                break;
            }
        }
        if (flag==0)
        {
            printf("该学号不存在!\n");
        }
        if (flag==1)
        {
            printf("成功将该学生信息删除,并保留在stu1文档中!\n");
    
            (*N)--;
        }
        system("pause");
    }
    void add(struct Student *stu,int *N)
    {
        int i,m,j,flag,k;
        k=(*N);
        printf("请输入待增加的学生数:\n");
        scanf("%d", &m);
        for(i=0; i<m; i++)
        {
            printf("请依次输入第%d位同学的信息:\n",k+1);
            printf("学生学号  学生姓名  年龄  性别  出生年份  出生月份  出生日  地址  电话号码  邮箱\n");
            scanf("%d%s%d%s%d%d%d%s%s%s",
                   &stu[(*N)+i].num,stu[(*N)+i].name,&stu[(*N)+i].age,&stu[(*N)+i].sex,
                   &stu[(*N)+i].birthday.year,&stu[(*N)+i].birthday.month,&stu[(*N)+i].birthday.day,
                   stu[(*N)+i].address,stu[(*N)+i].tel,stu[(*N)+i].Email);
            k++;
        }
        printf("学生信息添加成功!\n");
    
        (*N)=(*N)+m;
        system("pause");
    }
    
    void writeintofile(struct Student *stu,int N)
    {
        FILE *fp;
        fp=fopen("d:\\ccccc\\stu.txt","a+");
        for(int i=0; i<N; i++)
            fprintf(fp,"%d %s %d %c %d %d %d %s %s %s\n",
                        stu[i].num,stu[i].name,stu[i].age,stu[i].sex,
                        stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,
                        stu[i].address,stu[i].tel,stu[i].Email);
        fclose(fp);
        printf("成功将学生信息写入文件stu中!\n");
        system("pause");
    }
    
    void read (struct Student *stu2,int *N)
    {
        int i=0;
                                       //int count=0;int sumrow;
        FILE *fp;
        fp=fopen("d:\\ccccc\\stu.txt","r");
        if(fp==NULL)
        {
            printf("File cannot open! " );
            return;
        }
    
        while(1)                       //while(!feof(fp))
        {
           if(fscanf(fp,"%d %s %d %c %d %d %d %s %s %s\n",
                         &stu2[i].num,stu2[i].name,&stu2[i].age,&stu2[i].sex,
                         &stu2[i].birthday.year,&stu2[i].birthday.month,&stu2[i].birthday.day,
                         stu2[i].address,stu2[i].tel,stu2[i].Email)!=10) break;
           i++;                        //count++;
        }
                                      //sumrow = count+1;
        (*N)=(*N)+i;                  //(*N)=(*N)+sumrow;
        printf("文件行数为:%d",(*N));//sumrow);
        printf("\n");
        //for(i=0;i<sumrow;i++)
        //fscanf(fp,"%[^\n]%d%s%d%s%d%d%d%s%s%s",&stu2[i].num,stu2[i].name,&stu2[i].age,&stu2[i].sex,
        //&stu2[i].birthday.year,&stu2[i].birthday.month,&stu2[i].birthday.day,stu2[i].address,stu2[i].tel,stu2[i].Email);
        fclose(fp);
        printf("文件内容为\n");
        for (i=0;i<(*N);i++)
            printf("%d %s %d %c %d %d %d %s %s %s\n",
                  stu2[i].num,stu2[i].name,stu2[i].age,stu2[i].sex,stu2[i].birthday.year,
                  stu2[i].birthday.month,stu2[i].birthday.day,stu2[i].address,stu2[i].tel,stu2[i].Email);
    }
    
    int main()
    {
        int num,flag=1,N;
        printf("请输入要录入的学生信息个数\n");
        scanf("%d",&N);
        struct Student stu [1000];
        struct Student stu1[1000];
        struct Student stu2[1000];
        printf("                   学生信息管理系统                  \n");
        printf("*******************   功能菜单   ********************\n");
        printf("     ----------------------   ---------------------- \n");
        printf("        1.录入学生信息         2.浏览当前信息        \n");
        printf("     ********************** **********************   \n");
        printf("        3.查询学生信息         4.修改学生信息        \n");
        printf("     ********************** **********************   \n");
        printf("        5.删除学生信息         6 增添学生信息        \n");
        printf("     ********************** **********************   \n");
        printf("        7.将信息写入文件中     8.读出文件            \n");
        printf("     ********************** **********************   \n");
        printf("        9.保存并退出程序                             \n");
        printf("     ----------------------   ---------------------- \n");
        while (flag!=0)
        {
            printf("请选择想要完成的功能:\n");
            scanf("%d", &num);
            switch (num)
            {
            case 1:
                insert(stu,N);
                break;
            case 2:
                disp(stu,N);
                break;
            case 3:
                find(stu,N);
                break;
            case 4:
                modify(stu, N);
                break;
            case 5:
                del(stu,stu1, &N);
                break;
            case 6:
                add(stu,&N);
                break;
            case 7:
                writeintofile(stu,N);
                break;
            case 8:
                read(stu2,&N); //文件内容读入到stu2[] ?
                break;
            case 9:
                writeintofile(stu,N);//退出系统前,保存到文件
                flag=0;
                printf("即将退出程序!");
            }
        }
        
        return 0;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿