编写C程序从文件C:\Users\libinling\Desktop\idcard.txt中读入若干个人的姓名和身份证号码,从身份证里提取每个人的生日信息,将每个人的姓名和生日信息写入文件C:\Users\libinling\Desktop\birthday.txt中。 (C语言程序代码请贴入答案框中,程序运行结果截图也贴入答案框中,源文件.c上传。)
时间: 2023-07-12 07:41:39 浏览: 180
好的,这里给出一个简单的C语言实现,希望能够帮助到你。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PERSON_NUM 100
#define FILE_PATH_IN "C:\\Users\\libinling\\Desktop\\idcard.txt"
#define FILE_PATH_OUT "C:\\Users\\libinling\\Desktop\\birthday.txt"
struct Person {
char name[20];
char idcard[20];
char birthday[11];
};
int main() {
struct Person persons[MAX_PERSON_NUM];
int num = 0;
// 读取文件内容到数组中,并提取生日信息
FILE *fp_in = fopen(FILE_PATH_IN, "r");
if (fp_in == NULL) {
printf("文件打开失败!\n");
return 1;
}
char buf[50];
while (fgets(buf, sizeof(buf), fp_in) != NULL) {
sscanf(buf, "%s %s", persons[num].name, persons[num].idcard);
strncpy(persons[num].birthday, persons[num].idcard+6, 4);
strcat(persons[num].birthday, "-");
strncat(persons[num].birthday, persons[num].idcard+10, 2);
strcat(persons[num].birthday, "-");
strncat(persons[num].birthday, persons[num].idcard+12, 2);
num++;
}
fclose(fp_in);
// 将姓名和生日信息写入文件
FILE *fp_out = fopen(FILE_PATH_OUT, "w");
if (fp_out == NULL) {
printf("文件打开失败!\n");
return 1;
}
for (int i = 0; i < num; i++) {
fprintf(fp_out, "%s %s\n", persons[i].name, persons[i].birthday);
}
fclose(fp_out);
printf("已将生日信息写入文件!\n");
return 0;
}
```
解释一下上述代码的思路:
1. 定义一个结构体 `Person`,包含姓名、身份证号码和生日三个字段。
2. 定义一个数组 `persons`,用来存放所有人的信息。
3. 定义一个变量 `num`,表示人的数量,初值为0。
4. 打开输入文件,并逐行读取文件内容到数组中,同时提取身份证号码中的生日信息。
5. 将姓名和生日信息写入输出文件中。
6. 关闭输入文件和输出文件。
需要注意的是,这里假设每个人的姓名和身份证号码之间用空格分隔,身份证号码的格式为前6位是地址码,接下来4位是年份,接下来2位是月份,最后2位是日期,例如:`120104199710012345` 表示地址码为 `120104`,生日为 `1997-10-01`。如果实际情况与此不符,需要适当修改代码。
阅读全文