c-为什么我的打印链表功能不起作用



我编写了一个代码,将文本文件中员工的姓名、年龄、部门id、公司名称和工资分别输入到链接列表中。我创建了3个功能来插入、显示和更新列表。我的updateFile函数有问题,插入值部分正在工作,但当我再次调用显示函数(打印更新的列表(时,它不工作。有人能帮我吗?谢谢

employee.txt(文本文件(:

Peter 30 1001 Apple 8000
Joseph 50 1002 Oracle 4000
Mary 40 1003 Samsung 6000
Lilly 40 1203 Samsung 7000
Tony 50 1002 Oracle 3000
Jake 30 1005 Apple 3000
Sam 40 1007 Samsung 4000
Lisa 30 1300 Oracle 5000
Kate 50 1200 Apple 6000
Rick 50 1313 Apple 4000

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct personTag {
char name[20];
int age;
};
struct officialTag {
int deptId;
char cmpName[20];
double salary;
};
struct employeeTag {
struct personTag personalInfo;
struct officialTag officialInfo;
struct employeeTag *next;
};
typedef struct employeeTag EmpTag;
typedef EmpTag *EmpTagPtr;
typedef struct personTag person;
typedef struct officialTag official;

void insert(EmpTagPtr *s, char E_name[], int E_age, int E_deptid, char E_cmpname[], double 
E_salary);
void displayEmployees(EmpTagPtr s);
void updateFile(EmpTagPtr s, char E_name[], int E_age, int E_deptid, char E_cmpname[], 
double E_salary);

int main() {
EmpTagPtr start = NULL;
char E_name[20];
int E_age;
int E_deptid;
char E_cmpname[20];
double E_salary;
// reading employee.txt file
FILE *fp;
fp = fopen("employee.txt", "r");
//fp = stdin;
while (fscanf(fp, "%19s %d %d %19s %lf", E_name, &E_age, &E_deptid, E_cmpname, 
&E_salary) == 5) 
{
insert(&start, E_name, E_age, E_deptid, E_cmpname, E_salary);
}
fclose(fp);
int option;
printf("(1) Display employee detailsn");
printf("(2) Add new employee to the recordn");
printf("n");
printf("Enter an option : ");
scanf("%d",&option);
printf("n");
switch (option)
{
case 1:
displayEmployees(start);
break;
case 2:
updateFile(start, E_name, E_age, E_deptid, E_cmpname, E_salary);
displayEmployees(start);
break;
}
return 0;
}
void insert(EmpTagPtr *s, char E_name[], int E_age, int E_deptid, char E_cmpname[], double 
E_salary) 
{
// create an empty node
EmpTagPtr newNode = malloc(sizeof *newNode);
// filling in the values
strcpy(newNode->personalInfo.name, E_name);
newNode->personalInfo.age = E_age;
newNode->officialInfo.deptId = E_deptid;
strcpy(newNode->officialInfo.cmpName, E_cmpname);
newNode->officialInfo.salary = E_salary;
while (*s && strcmp(newNode->personalInfo.name, (*s)->personalInfo.name) > 0) 
{
s = &(*s)->next;
}
// `s` now points at the `EmpTagPtr` pointer where the new node should be inserted:
newNode->next = *s;
*s = newNode;
}
void displayEmployees(EmpTagPtr s) 
{
EmpTagPtr current = s;
while (current != NULL) {
// printing the data part
printf("Employee name:    %sn", current->personalInfo.name);
printf("Company name:     %sn", current->officialInfo.cmpName);
printf("Employee Age:     %dn", current->personalInfo.age);
printf("Department ID:    %dn", current->officialInfo.deptId);
printf("Employee Salary:  %.2lfn", current->officialInfo.salary);
printf("---------------------------------------------------------n");
current = current->next;  // move foward the current pointer
}
printf("NULLn");
fflush(stdout);
}
void updateFile(EmpTagPtr s, char E_name[], int E_age, int E_deptid, char E_cmpname[], 
double E_salary)
{
EmpTagPtr start = NULL;
EmpTagPtr current = s;
// writing to employee.txt file
FILE *fp;
fp = fopen("employee.txt", "a");
//fp = stdin;
printf("Enter Employee name :");
scanf("%s",E_name);
printf("n");
printf("Enter Company name  :");
scanf("%s",E_cmpname);
printf("n");
printf("Enter Employee Age  :");
scanf("%d",&E_age);
printf("n");
printf("Enter Department ID :");
scanf("%d",E_deptid);
printf("n");
printf("Enter Employee Salary :");
scanf("%lf",E_salary);
fprintf(fp, "%19s %d %d %19s %lf", E_name, &E_age, &E_deptid, E_cmpname, &E_salary);
fclose(fp);
}

您在updateFile上有类型问题,只需激活编译器警告。您的updateFile函数没有更新s,您应该添加一个具有以下值的节点:

insert(&s, E_name, E_age, E_deptid, E_cmpname, E_salary);

void updateFile(EmpTagPtr s, char E_name[], int E_age, int E_deptid, char E_cmpname[],-
double E_salary)
{
EmpTagPtr start = NULL;
EmpTagPtr current = s;
// writing to employee.txt file
FILE *fp;
fp = fopen("employee.txt", "a");
//fp = stdin;
printf("Enter Employee name :");
scanf("%s", E_name);
printf("n");
printf("Enter Company name  :");
scanf("%s", E_cmpname);
printf("n");
printf("Enter Employee Age  :");
scanf("%d", &E_age);
printf("n");
printf("Enter Department ID :");
scanf("%d", &E_deptid);
printf("n");
printf("Enter Employee Salary :");
scanf("%lf", &E_salary);
fprintf(fp, "%19s %d %d %19s %lf", E_name, E_age, E_deptid, E_cmpname, E_salary);
fclose(fp);
insert(&s, E_name, E_age, E_deptid, E_cmpname, E_salary);
}

可以使用局部变量简化函数签名


void updateFile(EmpTagPtr *s) {
char E_name[20];
int E_age;
int E_deptid;
char E_cmpname[20];
double E_salary;

// writing to employee.txt file
FILE *fp;
fp = fopen("employee.txt", "a");
//fp = stdin;
printf("Enter Employee name :");
scanf("%s", E_name);
printf("n");
printf("Enter Company name  :");
scanf("%s", E_cmpname);
printf("n");
printf("Enter Employee Age  :");
scanf("%d", &E_age);
printf("n");
printf("Enter Department ID :");
scanf("%d", &E_deptid);
printf("n");
printf("Enter Employee Salary :");
scanf("%lf", &E_salary);
fprintf(fp, "%19s %d %d %19s %lf", E_name, E_age, E_deptid, E_cmpname, E_salary);
fclose(fp);
insert(s, E_name, E_age, E_deptid, E_cmpname, E_salary);
}

相关内容

  • 没有找到相关文章