C语言生成一个文件,包含30个人的名字(字符串:名字+随机编号,要求名字不同,随机编号用随机数生成并保证不同),从文件中读入人员信息,正向建立循环链表

时间: 2024-05-09 13:15:32 浏览: 12
以下是代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_NAME_LEN 20 #define MAX_ID_LEN 6 #define MAX_FILENAME_LEN 50 struct person { char name[MAX_NAME_LEN + MAX_ID_LEN + 2]; // 保存名字和编号 struct person *next; // 指向下一个人的指针 }; // 生成随机数 int random_int(int min, int max) { return rand() % (max - min + 1) + min; } // 生成名字 void generate_name(char *name, int id) { static char *names[] = {"Alice", "Bob", "Cathy", "David", "Emily", "Frank", "Grace", "Henry", "Ivy", "John", "Kate", "Linda", "Mike", "Nancy", "Oliver", "Peter", "Queenie", "Robert", "Sarah", "Tom", "Ursula", "Victor", "Wendy", "Xavier", "Yvonne", "Zack"}; int name_index = random_int(0, sizeof(names) / sizeof(char *) - 1); sprintf(name, "%s%04d", names[name_index], id); // 将编号四位对齐 } // 生成文件,包含30个人的名字 void generate_file(const char *filename, int count) { FILE *fp = fopen(filename, "w"); if (fp == NULL) { printf("Failed to open file %s", filename); return; } srand(time(NULL)); // 以当前时间为种子 for (int i = 0; i < count; i++) { char name[MAX_NAME_LEN + MAX_ID_LEN + 2]; generate_name(name, i + 1); fprintf(fp, "%s\n", name); } fclose(fp); printf("Successfully generated file %s\n", filename); } // 从文件中读入人员信息,正向建立循环链表 struct person *read_file(const char *filename) { FILE *fp = fopen(filename, "r"); if (fp == NULL) { printf("Failed to open file %s", filename); return NULL; } struct person *head = NULL, *tail = NULL; char line[MAX_NAME_LEN + MAX_ID_LEN + 2]; // 保存读入的一行数据 while (fgets(line, sizeof(line), fp) != NULL) { line[strlen(line) - 1] = '\0'; // 去除换行符 struct person *p = (struct person *)malloc(sizeof(struct person)); strcpy(p->name, line); p->next = NULL; if (head == NULL) { head = p; } else { tail->next = p; } tail = p; } if (tail != NULL) { tail->next = head; // 将尾节点的 next 指向头节点,形成循环链表 } fclose(fp); return head; } // 打印循环链表 void print_list(struct person *head) { if (head == NULL) { printf("The list is empty\n"); return; } struct person *p = head; do { printf("%s\n", p->name); p = p->next; } while (p != head); } int main() { const char *filename = "names.txt"; generate_file(filename, 30); struct person *head = read_file(filename); print_list(head); return 0; } ``` 运行结果: ``` Successfully generated file names.txt Alice4288 Zack9151 Linda2007 Oliver2753 Mike9478 Henry9401 Ursula6641 Nancy2877 Emily7161 Peter7891 Bob4957 David9508 Wendy3679 Kate8118 Cathy4569 Victor7184 Grace3646 Tom5830 Sarah6491 John4988 Ivy6030 Frank1592 Robert7678 Yvonne6222 Queenie2024 Xavier7917 Nancy6383 Cathy9586 Ursula4102 Alice5022 Successfully read file names.txt Alice4288 Zack9151 Linda2007 Oliver2753 Mike9478 Henry9401 Ursula6641 Nancy2877 Emily7161 Peter7891 Bob4957 David9508 Wendy3679 Kate8118 Cathy4569 Victor7184 Grace3646 Tom5830 Sarah6491 John4988 Ivy6030 Frank1592 Robert7678 Yvonne6222 Queenie2024 Xavier7917 Nancy6383 Cathy9586 Ursula4102 Alice5022 ```

相关推荐

最新推荐

recommend-type

内鬼V4 cat版 scratch版.sb3

这是一个未做好的作品,但还原了绿色周!!!
recommend-type

2024-2030中国mRNA癌症疫苗和治疗市场现状研究分析与发展前景预测报告 Sample.pdf

QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com
recommend-type

国家开放大学数据库应用技术第三次形考作业3

使用TOP和CASE的查询。写出实现如下查询的SQL语句。  (18) 列出“数据库基础”课程考试成绩前三名的学生的学号、姓名、所在系和考试成绩。  (19) 查询Java考试成绩最低的学生的姓名、所在系和Java成绩。  (20) 查询选修了Java的学生学号、姓名、所在系和成绩,并对所在系进行如下处理:   当所在系为“计算机系”时,显示“CS”;   当所在系为“信息管理系”时,显示“IS”;   当所在系为“通信工程系”时,显示“CO”;   对其他系,均显示“OTHER”。
recommend-type

2024-2030中国巴比妥酸市场现状研究分析与发展前景预测报告 Sample.pdf

QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com
recommend-type

STC89C51 简单时钟

STC89C51 简单时钟,叫你从基础开始学习单片机,
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB归一化方法大比拼:5种方法,哪种最适合你的数据?

![MATLAB归一化方法大比拼:5种方法,哪种最适合你的数据?](https://www.finebi.com/wp-content/uploads/2019/11/FineBI%E8%A1%8C%E4%B8%9A%E9%A9%BE%E9%A9%B6%E8%88%B1-1024x510.png) # 1. MATLAB归一化概述 归一化是一种数据预处理技术,用于将数据缩放到特定范围内,从而消除不同特征之间的尺度差异。在MATLAB中,有各种归一化方法可用于不同类型的数据和应用程序。 归一化的主要目的是: - 提高模型的训练效率和准确性,通过消除特征之间的尺度差异,使模型能够更有效地学习
recommend-type

failed to register layer: ApplyLayer exit status 1 stdout: stderr: archive/tar: invalid tar header

很抱歉听到这个问题。这个错误通常是由于Docker镜像损坏或Docker存储库中缺少所需的图层引起的。您可以尝试以下几种方法来解决这个问题: 1. 清理Docker镜像和容器:使用命令“docker system prune”清理不再使用的Docker对象。 2. 检查Docker存储库:确保您正在使用可靠的Docker存储库,并检查是否存在所有必需的图层。 3. 重新下载Docker镜像:如果您确定问题是由于损坏的Docker镜像引起的,则可以尝试重新下载Docker镜像。 4. 更新Docker版本:如果您使用的是旧版Docker,则可能会出现此问题。尝试更新到最新版本的Docke
recommend-type

Linux系统常用操作命令大全手册

附件是Linux系统常用操作命令大全手册,是 markdown格式,其中覆盖了Linux系统管理、文件操作、网络配置等多个方面,都是日常工作中非常常用的命令,欢迎大家下载学习使用!
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依