上周五在实验课上对着电脑崩溃,哈希表早就没问题了可是文件中个人信息的输入与读出怎么都实现不了,两个学长就看着我自暴自弃…
今天看了一哈fprintf与fscanf,果断放弃用fgets与fputs来写——毕竟fprintf和fscanf在格式输入输出上特方便。
功能需求
电脑端录入员工信息插入通讯录文件,同时也要求程序从通讯录文件中读取员工信息以供查询。
实现
插入:
先就将信息都录入Staff变量中,然后利用fprintf()把信息录入文件。
fprintf(fp, "姓名:%s\n", Staff.Name);
fprintf(fp, "电话:%s\n", Staff.TelepNum);
fprintf(fp, "地址:%s\n\n", Staff.Address);
利用格式化输入添加了说明性前缀(如“姓名:”)。
point:最后一句的格式化中有两个‘\n’,是为了隔开两个不同的员工。
读取:
我是在建立哈希表的同时就把通讯录上所有现存信息直接插入哈希表,所以对文件是一次性从头读到尾。
while (fscanf(fp, "\n姓名:%s\n", Staff.Name) == 1)
{
fscanf(fp, "电话:%s\n", Staff.TelepNum);
fscanf(fp, "地址:%s\n", Staff.Address);
Insert(H, Staff);
}
利用格式化输入直接将姓名读入Staff中,前缀不录入。
point:要记得把该员工姓名上一行的换行符也给吸收掉,不然while直接退出。
为何要在“姓名”前吸收换行符?因为不知怎得通讯录的第一行就只有一个换行符,算是格式统一吧…
另外
汉字在字符数组里要用两个单元存储,Name[5]遇到三个汉字的姓名就会溢出吼。程序异常结束通讯录文件也不会保存,插入的员工信息会丢失。