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!!

3个回答

没有你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就是找到的数据的下标
这样就能查询了
Seemyeyes7
Seemyeyes7 回复贵阳开挖机的数马善福程序写得最好: 好了 请你再帮我看看
12 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复Seemyeyes7: 把你的代码用代码片格式化一下,你自己看看都没有贴对。还有文件的内容,贴出来
12 个月之前 回复
Seemyeyes7
Seemyeyes7 我在上一个函数里录入数据了,而且只用printf的话只会出现神秘的烫烫烫····还是没解决 我把我写的全部代码发上去了,你在帮忙看看
12 个月之前 回复

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

Seemyeyes7
Seemyeyes7 我赋值了 我更新了代码 你再看看
12 个月之前 回复

笨办法 把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]代表工时,这五个数组都需要自己单独定义。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐