附件中有若干条以下列结构体形式保存的数据,把它们全部读取出来,并以文字形式保存到文本文件中(所有字符串都是ASCII字符,不考虑UTF8格式)。
typedef struct _st_record {
char szName[60];
char nGender; /* 0--male, 1--female */
unsigned char nAge;
short nBirthYear;
char szDescription[150];
} RRECORD;
//声明计数用变量
//声明读取用的文件指针
//声明写入用的文件指针
//1.读取data.dat, fpen, 读.
//2.创建写入用的文件指针 fopen .txt, 写
//3 while循环读取dat,直到读空
//3.1 每次读取一个结构体.放到结构体变量里 =>可以有子函数,但实际上一句话就够了。
//3.2 把结构体变量格式化成文本以后,写入txt文件里 =>可以有子函数
//4.关闭读指针
//5.关闭写指针
按照你的逻辑,代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
typedef struct _st_record {
char szName[60];
char nGender; /* 0--male, 1--female */
unsigned char nAge;
short nBirthYear;
char szDescription[150];
} RRECORD;
//将结构体写入文本文件
void writeFile(FILE* fp, RRECORD t)
{
char buf[100] = { 0 };
sprintf(buf, "Name:%s\n", t.szName);
fwrite(buf, 1, strlen(buf), fp);
if (t.nGender == 0)
sprintf(buf, "Gender:male\n");
else
sprintf(buf, "Gender:femal\n");
fwrite(buf, 1, strlen(buf), fp);
sprintf(buf, "Age:%d\n", t.nAge);
fwrite(buf, 1, strlen(buf), fp);
sprintf(buf, "BirthYear:%d\n", t.nBirthYear);
fwrite(buf, 1, strlen(buf), fp);
sprintf(buf, "Description:%s\n", t.szDescription);
fwrite(buf, 1, strlen(buf), fp);
}
int main()
{
int n = 0; //声明计数用的变量
FILE* fr, *fw; //声明读取和写入的文件指针
RRECORD arr[MAXLEN]; //保存数据
//打开二进制文件
fr = fopen("data.dat", "rb"); //读取二进制文件
if (fr == 0)
{
printf("%s打开失败!\n");
return 0;
}
//打开文本文件
fw = fopen("out.txt", "w");
//读取文件
while (!feof(fr))
{
memset(&arr[n], 0, sizeof(RRECORD));
if (fread(&arr[n], sizeof(RRECORD), 1, fr)) //逐个结构体读取
{
//将结构体写入文本文件
writeFile(fw, arr[n]);
n++; //读取的个数+1
}
}
fclose(fr); //关闭读指针
fclose(fw); //关闭写指针
return 0;
}
文件操作可以看我这篇博客https://blog.csdn.net/weixin_64811333/article/details/125249190
#include <stdio.h>
#define INPUT_FILE_ERROR 1
#define OUTPUT_FILE_ERROR 2
typedef struct _st_record {
char szName[60];
char nGender; /* 0--male, 1--female */
unsigned char nAge;
short nBirthYear;
char szDescription[150];
} RRECORD;
int main() {
FILE *in_file = fopen("data.dat", "rb");
if (!in_file) {
perror("failed to open data.dat");
return INPUT_FILE_ERROR;
}
FILE *out_file = fopen("data.txt", "w");
if (!out_file) {
perror("failed to open data.txt");
fclose(in_file);
return OUTPUT_FILE_ERROR;
}
RRECORD r;
while (fread(&r, sizeof(RRECORD), 1, in_file) == 1) {
fprintf(out_file, "%s, %d, %d, %d, %s\n", r.szName, r.nGender, r.nAge,
r.nBirthYear, r.szDescription);
}
fclose(in_file);
fclose(out_file);
return 0;
}
rb
wb