struct workers { char name[15];//姓名 char gender;//性别 char department[18];//单位 unsigned int age;//年龄 unsigned long telephone;//电话 unsigned long wage;//工资 unsigned long num;//职工号 struct workers* next; };建立此结构体的录入信息函数
时间: 2023-09-10 07:11:25 浏览: 80
可以按照以下步骤编写录入信息函数:
1. 定义函数头:`void input_info(struct workers* head)`,该函数接收一个指向结构体链表头节点的指针。
2. 在函数内部定义一个指向当前节点的指针 `p`,初始值为 `head`。
3. 在循环中遍历链表,直到找到最后一个节点,即 `p->next == NULL`。
4. 在循环内部,为当前节点 `p` 分配内存空间:`p->next = (struct workers*)malloc(sizeof(struct workers))`。
5. 判断内存是否分配成功,如果失败则输出错误信息并退出函数。
6. 提示用户输入各个字段的值,并使用 `scanf()` 函数读取用户输入,赋值给 `p->next` 指向的节点。
7. 如果输入的职工号已经存在,则输出错误信息并释放刚刚分配的内存,退出函数。
8. 如果输入的职工号是一个新的职工,则将当前节点的指针移动到下一个节点:`p = p->next`。
9. 循环结束后,输出提示信息并返回。
完整代码如下:
```c
void input_info(struct workers* head)
{
struct workers* p = head;
while (p->next != NULL) {
p = p->next;
}
// p 指向最后一个节点
p->next = (struct workers*)malloc(sizeof(struct workers));
if (p->next == NULL) {
printf("Error: memory allocation failed.\n");
return;
}
printf("请输入职工姓名:");
scanf("%s", p->next->name);
printf("请输入职工性别(M/F):");
scanf(" %c", &p->next->gender);
printf("请输入职工所在单位:");
scanf("%s", p->next->department);
printf("请输入职工年龄:");
scanf("%u", &p->next->age);
printf("请输入职工电话:");
scanf("%lu", &p->next->telephone);
printf("请输入职工工资:");
scanf("%lu", &p->next->wage);
printf("请输入职工号:");
scanf("%lu", &p->next->num);
// 检查职工号是否重复
struct workers* q = head;
while (q->next != p->next) {
if (q->next->num == p->next->num) {
printf("Error: duplicate worker number.\n");
free(p->next);
p->next = NULL;
return;
}
q = q->next;
}
printf("录入成功!\n");
}
```
阅读全文