weixin_51770888 2020-12-18 09:15 采纳率: 100%
浏览 253
已结题

C语言 添加员工数据到文件中后出现 return value 3221225477

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
struct workers
{
	char name[20]; //姓名 
	char sex[20]; // 性别 
	char workno[20]; // 职工号 
	char birthday[20]; // 出生年月 
	char degree[20]; // 学历 
	char position[20]; // 职务 
	char salary[20]; // 工资 
	char address[20]; // 住址 
	char phone[20]; // 电话号码 
};
typedef struct node//定义链表单体 
{
	struct workers data;
	struct node *next;
}Node;

int tianjia(Node *worker)//添加每位职工的数据 ,利用链表实现 
{
	FILE *fp; 
	Node *p,*r;
	char x[10];
	r=worker;
	while (r->next != NULL)
	{
		r=r->next;     
	}
	while(1)
	{
		printf("输入0返回主界面。");
		printf("请输入职工号:"); 
		scanf("%s",x);
		if(strcmp(x,"0")==0)
		{
			return 0;
		} 
		p = (Node *)malloc(sizeof(Node));
		strcpy(p->data.workno,x);
		printf("请输入姓名;");
		scanf("%s",p->data.name);
		printf("请输入性别:");
		scanf("%s",p->data.sex);
		printf("请输入出生年月:");
		scanf("%s",p->data.birthday);
		printf("请输入学历:");
		scanf("%s",p->data.degree);
		printf("请输入职务:");
		scanf("%s",p->data.position);
		printf("请输入住址:");
		scanf("%s",p->data.address);
		printf("请输入工资:"); 
		scanf("%s",p->data.salary); 
		printf("请输入电话号码:");
		scanf("%s",p->data.phone);
		p->next=NULL;
		r->next=p;
		r=p;
		if((fp=fopen("D:\\steam\\职工信息.txt","w"))==NULL)
		{
			printf("数据无法保存。"); 
		} 
		fprintf(fp,"%s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n",p->data.name, p->data.sex,
			p->data.birthday, p->data.degree, p->data.position, p->data.address,p->data.salary,p->data.phone);
		fclose(fp);
	}

	
}; 


int xianshi(Node *worker)//显示当前所有职工的数据 
{
	Node *p;
	FILE *fp; 
	p=worker->next;
	if(p==NULL)
	{
		printf("尚无信息可以显示。");
	}
	printf(" \n职工号   姓名	性别	出生年月    学历	职务	工资	住址	电话	\n ");
	if((fp=fopen("D:\\steam\\职工信息.txt","r"))==NULL)
		{
			printf("打开文件失败。"); 
		} 
	while(p!=NULL)
	{
		fscanf(fp,"\n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.workno, p->data.name,
			p->data.sex, p->data.birthday, p->data.degree, p->data.position,
			p->data.salary, p->data.address, p->data.phone);
		p = p->next;
	} 
}
int chaxun(Node *worker)//查询功能 
{
	Node *p;
	char find[20];
	int x;
	p->next=worker;
	if(p==NULL)
	{
		printf("没有信息可以查询!");
		return 0;
	}
	printf("\n输入1将按职称查询,输入2将按学历查询,输入3将按照工资查询\n");
	scanf("%s",&x);
	if(x==1)
	{
		printf("请输入所查询人的职称:");
		scanf("%s",find);
		while(p!=NULL)
		{
			if(strcmp(p->data.workno,find)==0)//利用递归,使P指向所查询的人并输出信息 
			{
				printf(" 职工号		姓名	性别	出生年月	学历	职务	工资	住址	电话 \n ");
				printf("\n%s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ",p->data.workno,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.phone);
			}
			p=p->next;
		} 
	}
	else if(x==2)
	{
		printf("请输入所要查询的学历。");
		scanf("%s",find);
		while(p!=NULL)
		{
			if(strcmp(p->data.degree,find)==0)
			{
				printf(" 职工号		姓名	性别	出生年月	学历	职务	工资	住址	电话 \n ");
				printf("\n%s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ",p->data.workno,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.phone);
			}
			p=p->next;
		} 
	}
	else if(x==3)
	{
		printf("请输入所要查询人的工资:");
		scanf("%s",find);
		while(p!=NULL)
		{
			if(strcmp(p->data.salary,find)==0)
			{
				printf(" 职工号		姓名	性别	出生年月	学历	职务	工资	住址	电话 \n ");
				printf("\n%s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ",p->data.workno,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.phone);
			}
			p=p->next;
		} 
	} 
	else if(x==0)
	{
		return 0;
	}
} 
int xiugai(Node *worker)
{
	Node *p;
	char find[20];
	int x,y,z;
	p=worker->next;
	if(p==NULL)
	{
		printf("没有信息可以修改!");
		return 0;
	}
	printf("1.进行单个员工的工资修改。\n");
	printf("2.进行某一职位全体员工的工资变动。\n");
	printf("请输入:");
	scanf("%d",&x);
	if(x==1)
	{	     	
	printf("\n请输入该员工的职工号:");
	scanf("%s",find);
	while (p != NULL) //令指针P指向所要修改的员工 
	    {
	    	
	   	    if (strcmp(p->data.workno, find) == 0)
	   	    {
	   		    break; 
	        }
		    p = p->next;
	    }
	if(p!=NULL)
	{
		int y;
		while (1)
		{
			
		}
	}
	}
}



int main()//主函数 
{
	Node *worker;
	int x;
	worker=(Node*)malloc(sizeof(Node));
	worker->next=NULL;
	while(1)
	{
		printf("=============主界面============\n") ;
		printf("\t1.输入职工信息\n");
		printf("\t2.显示所有职工信息\n");
		printf("\t3.查询职工信息\n");
		printf("\t4.修改职工信息\n");
		printf("\t5.删除职工信息\n");
		printf("\t0.退出系统\n");
		scanf("%d",&x);
		switch(x)
		{
		  case 0:printf("感谢使用!"); return 0;
		  case 1:tianjia(worker); break;
		  case 2:xianshi(worker);break;
		  case 3:chaxun(worker);break;
		  case 4:xiugai(worker);break;
		  case 5:break;
		  default :printf("系统错误!");break;
	    }
	}
} 

问题出现在第一个tianjia函数中,一旦填写完员工数据后就直接弹出 return value 3221225477

  • 写回答

5条回答 默认 最新

  • liufegnde 2020-12-23 13:56
    关注

    少了一个%s.对应的p->data.workno

            fprintf(fp,"%s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n", p->data.workno,p->data.name, p->data.sex,
                p->data.birthday, p->data.degree, p->data.position, p->data.address,p->data.salary,p->data.phone);

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?