//读写结构体
#include <stdio.h>
typedef struct student
{
int num;
char name[30];
char sex;
float math;
float english;
float chinese;
}Stu;
Stu s[5] =
{
1001,"wukong",'x',99,99,99,
1002,"songjiang",'x',99,22,11,
1003,"baoyu",'x',79,33,100,
1004,"liudehua",'y',100,100,88,
1005,"zhaosi",'z',33,34,12
};
int main(void)
{
//往文件中写入结构体
FILE* pf = fopen("G:/qtcode/stu.data","w+");
if(pf == NULL)
exit(-1);
//写入方式1
int i;
for(i = 0;i<sizeof(s)/sizeof(*s);i++)
{
fwrite((void*)(&s[i]),sizeof(Stu),1,pf);
}
//写入方式2
fwrite((void*)s,sizeof(s),1,pf);
//写入方式3
fwrite((void*)s,sizeof(Stu),5,pf);
rewind(pf);
//从文件中读结构体
//读出方式1
Stu buf;
while( fread((void*)&buf,sizeof(Stu),1,pf) )
{
printf("num = %d\n",buf.num);
printf("name = %s\n",buf.name);
printf("sex = %c\n",buf.sex);
printf("math = %.2f\n",buf.math);
printf("english = %.2f\n",buf.english);
printf("chinese = %.2f\n",buf.chinese);
printf("--------------\n");
}
//读出方式2
Stu buf[3];
int j,n;
while((n = fread((void*)buf,sizeof(Stu),3,pf)) > 0)
{
for(j = 0;j < n;j++)
{
printf("num = %d\n",buf[j].num);
printf("name = %s\n",buf[j].name);
printf("sex = %c\n",buf[j].sex);
printf("math = %.2f\n",buf[j].math);
printf("english = %.2f\n",buf[j].english);
printf("chinese = %.2f\n",buf[j].chinese);
printf("--------------\n");
}
}
//读出方式3
Stu buf[5];
int j;
fread((void*)buf,sizeof(Stu),5,pf);
for(j = 0;j < 5;j++)
{
printf("num = %d\n",buf[j].num);
printf("name = %s\n",buf[j].name);
printf("sex = %c\n",buf[j].sex);
printf("math = %.2f\n",buf[j].math);
printf("english = %.2f\n",buf[j].english);
printf("chinese = %.2f\n",buf[j].chinese);
printf("--------------\n");
}
return 0;
}
以上是代码。
fwrite有一点是非str类型,虽然读出没有问题但是用记事本打开文件后非str型数据会乱码,怎么解决?
要解决这个问题,可以将非str类型的数据事先转换为str类型,然后再进行写入。以下是一个示例代码:
data = 12345 # 非str类型数据
data_str = str(data) # 将数据转换为str类型
with open('file.txt', 'w') as f:
f.write(data_str)
这样,在用记事本打开文件时,非str类型数据不会出现乱码,而是以字符串的形式呈现出来。
此时如何以int读出呢?
可以通过将str转换为int型读出
// 从文件中读取字符串
fgets(str, 100, fp);
// 将字符串转换为整数
num = atoi(str);
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp;
char str[100];
int num;
// 打开文件
fp = fopen("data.txt", "r");
// 检查文件是否成功打开
if (fp == NULL) {
printf("无法打开文件。\n");
return 1;
}
// 从文件中读取字符串
fgets(str, 100, fp);
// 将字符串转换为整数
num = atoi(str);
// 输出整数
printf("读取的整数为:%d\n", num);
// 关闭文件
fclose(fp);
return 0;
}