请使用手机微信扫码安全登录

切换账号密码登录

绑定手机号

应国家法规对于账号实名的要求,请您在进行下一步操作前,需要先完成手机绑定 (若绑定失败,请重新登录绑定)。了解更多

不绑定绑定手机号

360官网 | 360商城

推荐论坛版块活动360粉丝商城众测粉丝轰趴馆常见问题
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#define LEN sizeof(struct worker)
struct worker{
  long int num;
char name[20];
char sex[20];
char race[20];
char year[20];
char pos[20];
struct worker*next;
};
struct worker*head;
struct worker*p1,*p2;
int n=0;
struct worker*creat(){
n=0;
p1=p2=(struct worker*)malloc(LEN);
scanf("%d%s%s%s%s%s",&p1->num,&p1->name,&p1->sex,&p1->race,&p1->year,&p1->pos);
head=NULL;
while(p1->num!=0){
  n=n+1;
  if(n==1)head=p1;
  else p2->next=p1;
  p2=p1;
  p1=(struct worker*)malloc(LEN);
    scanf("%d%s%s%s%s%s",&p1->num,&p1->name,&p1->sex,&p1->race,&p1->year,&p1->pos);
}
p2->next=NULL;
return(head);
}

void input(struct worker*p){
scanf("%d %s %s %s %s %s",&p->num,&p->name,&p->sex,&p->race,&p->year,&p->pos);
}

void output(struct worker*p){
   printf("%05d   %-s   %-s   %-s   %-s   %-s\n",p->num,p->name,p->sex,p->race,p->year,p->pos);
}

void insert(){
input(p1);
while(p1->num!=0){
  n++;
  printf("n=%d\n",n);
  if(n==1) head=p1;
  else p2->next=p1;
  p2=p1;
  p1=(struct worker*)malloc(LEN);
  input(p1);
}
p2->next=NULL;
}

bool dele(struct worker *p){
if(p==NULL) return false;
struct worker *q=p->next;
p->num=p->next->num;
p->next=q->next;
free(q);
return true;
}
struct worker*del(struct worker* head, int m) {
struct worker* p = head;
struct worker* ex;
int i;
for ( i = 1; i < m-1 ;i++){
   p = p->next;
}
ex = p->next;
p->next = ex->next;
  free(ex);
return head;
}

void update(int x){
struct worker*p;
for(p=head;p!=NULL;p=p->next){
  if(p->num==x){
   input(p);
   break;
  }
}
}
void search(){
char namep[10];
scanf("%s",namep);
int len=strlen(namep);
int flag,sflag=0;
struct worker*p;
for(p=head;p!=NULL;p=p->next){
  flag=1;
  int i;
  for(i=0;namep;i++){
   if(p->name!=namep)break;
   if(p->name==namep&&len==i+1)sflag=1;
  }
  if(flag&&sflag){
   printf("%s的信息:\n",namep);
   output(p);
   printf("\n");
   return;
  }
}
printf("No find\n\n");
}
void travel(){
struct worker*p;
for(p=head;p!=NULL;p=p->next)
output(p);
}

void enter(struct worker*p){
  FILE*fp;
if( (fp=fopen("档案.txt","w")) == NULL ){
        puts("Fail to open file!");
        exit(0);
    }
  for(p=head;p!=NULL;p=p->next){
    fprintf(fp,"%05s%8s%4s%10s%15s%10s",p->num,p->name,p->sex,p->race,p->year,p->pos);
    fprintf(fp,"\n");
  }
  printf("\n");
  printf("over!!!\n");
       return;
  }

void a(){
printf("请输入数据:\n");
struct worker*head;
  head=creat();
  travel();
}

void b(){
struct worker*head;
  travel();
}
void c(){
         printf("请输入数据:\n");
    insert();
}

void d(){
   printf("请输入要删除数据编号:");
   int x;
    scanf("%d",&x);
    if(x==1){
     dele(head);
    }
    else del(head,x);
    printf("删除完毕!\n\n");
}
void e(){
int x;
printf("请输入修改数据编号:");
    scanf("%d",&x);
    printf("请重新输入数据:\n");
    update(x);
}
void f(){
travel();
}
void g(){
printf("请输入姓名:");
    search();
}
void h(){
   struct worker*p=head;
   enter(p);
}
int main(){
void a();
void b();
void c();
void d();
void e();
void f();
void g();
void h();
int m=0;
while (m!= 9){
  printf("输入功能代码(1为录入,2为显示,3为插入,4为删除,5为更改,6为遍历,7为查询,8为文件保存:\n");
  scanf("%d", &m);
  switch (m)
  {
  case 1:a(); break;
  case 2:b(); break;
  case 3:c(); break;
  case 4:d(); break;
  case 5:e(); break;
  case 6:f(); break;
  case 7:g(); break;
  case 8:h(); break;
  }
}
getchar();
return 0;
}


00001 张三 男 汉族 2000.9.28 处长
00002 马晓晴 女 回族 2000.5.3 科长
00003 买买提 男 维吾尔族 2007.7.34 职员
00004 海萨尔 男 哈萨克族 2004.6.23 职员
00005 白哈达 男 蒙古族 2009.7.6 科长
00006 李娟 女 汉族 2005.5.4 职员

刘军平_2017 + 1 经验 赞一个!

共 3 个关于C语言创建文件,遇到停止工作?的回复 最后回复于 2020-12-2 23:23

评论

直达楼层

沙发
whoami1978_wx LV8.少校 发表于 2020-12-2 09:11 | 只看该作者 | 私信
一个简单的错,你的struct worker中,num 为long类型,肯定不能用%s输出(要内存非法访问的)
刘军平_2017 LV8.少校 是的,的确如此。 
2021-7-16 14:59回复
板凳
whoami1978_wx LV8.少校 发表于 2020-12-2 09:12 | 只看该作者 | 私信
(未打完)所以改
    fprintf(fp,"%05s%8s%4s%10s%15s%10s",p->num,p->name,p->sex,p->race,p->year,p->pos);

    fprintf(fp,"%05d%8s%4s%10s%15s%10s",p->num,p->name,p->sex,p->race,p->year,p->pos);
就可以了
刘军平_2017 LV8.少校 是的,的确如此。 
2021-7-16 15:00回复
地板
七喜先生 VIP认证 超级版主 发表于 2020-12-2 23:23 | 只看该作者 | 私信
如果朋友在此没有征集到好的回答,建议这位朋友去360问答社区(http://wenda.so.com/)相关分类中征集回答,360问答社区的平台上不但有非常多的热心网友和牛人们能帮助到你!同时有了满意答案后还能帮助到其他不懂这个问题的人!感谢朋友对360问答支持!友情提示,悬赏征集会助于你问题的快速解决!一旦有能解决朋友问题的答案的时候,朋友要记得采纳,这样会换来更多朋友的帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

360fans_u44476237 LV1.上等兵

粉丝:0 关注:0 积分:5

精华:0 金币:7 经验:4

最后登录时间:2020-12-1

360商城青铜会员

私信 加好友

最新活动

360云台摄像机9Pro写评论送大奖!

排行榜

热度排行 查看排行
今日 本周 本月 全部
    今日 本周 本月 全部

      内容推荐 热门推荐最新主帖

      扫码添加360客服号,涨知识的同时还有超多福利等你哦

      快速回复 返回顶部 返回列表