C语言用其中一个结构的体元素从文件中查找到相同的结构体之后如何从文件中输出查找到的那个结构体

功能要求:
① 职工基本信息的录入、增加、删除、修改;
② 按各种条件查询职工信息;
③ 应发工资计算;
④ 其它功能,如工资分布情况统计,代交税金计算,津贴发放,工资晋级等。









#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n;
void member_putin_info();
void member_seaech_info(struct member member[100],int n);
void member_add_info();
void member_modify_info();
void member_delete_info();
char Readspecailline_info(int i);

    struct member{
    char name[20];
    char post[20];
    int age,wages;
    int WorkingHours;
    };

    void member_putin_info(){
    int i;
    FILE *fp1,*fp2;
    struct member member[100];
    printf("Input n:");
    scanf("%d",&n);


    if((fp2=fopen("D:\\VC data\\salary1.txt","w"))==NULL)
    {printf("File open error!\n");
    exit(0);                                               
    }
    fprintf(fp2,"%d",n);

    if(fclose(fp2)){                           
    printf("can not close the file!\n");
    exit(0);
    }

    if((fp1=fopen("D:\\VC data\\salary.txt","w"))==NULL)
    {printf("File open error!\n");
    exit(0);                                              //*打开文件*//
    }

    for(i=0;i<n;i++){                                //*职工信息录入功能*//
    printf("Input name:\n");
    scanf("%s",&member[i].name);
    fprintf(fp1,"%s ",member[i].name);
    printf("Input post:\n");
    scanf("%s",&member[i].post);
    fprintf(fp1,"%s ",member[i].post);
    printf("Input age:\n");
    scanf("%d",&member[i].age);
    fprintf(fp1,"%d ",member[i].age);
    printf("Input wages:\n");
    scanf("%d",&member[i].wages);
    fprintf(fp1,"%d ",member[i].wages);
    printf("Input WorkingHours:\n");
    scanf("%d",&member[i].WorkingHours);
    fprintf(fp1,"%d ",member[i].WorkingHours);
    printf("\n");
    fprintf(fp1,"\n");

    }
    if(fclose(fp1)){                          //*关闭文件*//
    printf("can not close the file!\n");
    exit(0);
    }
    }



    void member_seaech_info()                                //*职工信息查询功能*// 
    {
       struct member member[100];
        FILE *fp1,*fp2,*fp3;
if((fp2=fopen("D:\\Vc data\\salary.txt","r"))==NULL)
    {printf("File open error!\n");
exit(0);  }   
   fscanf(fp2,"%d",&n);


if((fp1=fopen("D:\\Vc data\\salary.txt","r"))==NULL)
    {printf("File open error!\n");
exit(0);  }          
     int i;
    char Sname[20]; 
    char Spost[20];
     int choice; 
     int age; 
     char ch[2];

     printf("[1]Select name\n");
     printf("[2]Select post\n");
     printf("[3]Select age\n");
     printf("[4]Selcet wages\n");
     printf("[5]Select WorkingHours\n");

     printf("Enter choice:");
     scanf("%d",&choice);
     if(choice<1||choice>5)
         printf("输入错误!\n");

     if(choice==1){
printf("Enter the name:");
scanf("%s",&Sname);
for(i=0;i++;i<n){
    if(strcmp(Sname,member[i].name)==0){
    break;
    }
}
     }



if(fclose(fp1)){                         
    printf("can not close the file!\n");
    exit(0);
    }

if(fclose(fp2)){                          
    printf("can not close the file!\n");
    exit(0);}
}



















    int main(void)
    { int choice;
    printf("enter your choice:");
    scanf("%d",&choice);    
    switch(choice){
        case 1:member_putin_info();break;
        case 2:member_seaech_info();break;

    }

return 0;
}

     我就用名字进行对比,完了之后找到第几个结构有相同的名字,想输出这个结构体的所有元素,但是用scanf(fp1,"%s",member[i].name)这样的做法貌似永远只取值我文件中的第一行,求大神教教我方法!!
只要方法能行可靠就okk!!
没有你txt文件的内容和member的定义,没法给你调试和编写代码

只能大概说说

struct member member[100];

你定义了member[100]
但是没有读取记录放入member里面的逻辑
在
if((fp1=fopen("D:\Vc data\salary.txt","r"))==NULL)
{printf("File open error!\n");
exit(0); }
下面
for (int i = 0; i < n; i++)
{
fscanf(fp, "%s %d,...", member[i].sname, &member[i].age); //这一行是大概的演示,要根据你结构体的内容和文件的内容去修改
}
...
然后
for(i=0;i++;i<n){
if(strcmp(Sname,member[i].name)==0){
break;
}
}
printf("%s", member[i].sname); //此时i就是找到的数据的下标
这样就能查询了

你的先把文件中的数据读取到内存中呀,我看你的memeber都没有赋值呀

笨办法 把member里的每个元素都输出到一个数组里,例如文件salary中member中所有的名字放入数组a[50],然后按名字查找,输入一个名字ming,与a[50]中的元素利用for语句进行对比,找到时候有一个i的值,这个i值可以用于输出member中的所有元素a[i] b[i] c[i] d[i] e[i],其中a[i]代表名字,b[i]代表职务,c[i]代表年龄,d[i]代表工资,e[i]代表工时,这五个数组都需要自己单独定义。