c语言关于文件读写的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言关于文件读写的问题相关的知识,希望对你有一定的参考价值。

我定义了结构体struct student stu[33](里面有name code)
然后把他们都写入文件中
我想问一下怎么把他们 读出来
顺序还是原来的顺序

参考技术A #include <stdio.h>
#include <stdlib.h>
#include <memory.h>

//结构体,其中包含各种数据类型
struct myStruct

int Num;
float Data;
char Name[100];
double Len;
char Ch;
bool IsRight;
;

void main(void)

//定义一个结构体的数组:
struct myStruct myDatas[10];
int i = 0;
FILE *pWF = NULL;//写文件用的指针
FILE *pRF = NULL;//读文件用的指针
//从文件中读数据时使用的临时变量
struct myStruct tmpData;

//将数组置空数据
memset(myDatas,0x0,sizeof(myDatas));
//将数据存放到结构体数组中
for ( i = 0 ; i < 10 ; i++ )

myDatas[i].Num = i;
myDatas[i].Data = 3.14159 * i;
sprintf(myDatas[i].Name,"名字%d",i);
myDatas[i].Len = 2.718281828;
myDatas[i].Ch = 'a' + i;
myDatas[i].IsRight = (0 == i % 2) ? false : true;


//将结构体数组以二进制方式写到文件中
pWF = fopen("OutData.dat","wb");
if ( NULL == pWF )

perror("输出文件打开失败!");
return;

//执行写文件
fwrite(myDatas,sizeof(myDatas),1,pWF);
//判断写文件是否失败
if ( ferror(pWF) )

fclose(pWF);
perror("写输出文件失败!");
return;

//写没失败时,表示写文件完成,则关闭文件
fclose(pWF);

//下面开始打开文件读取数据
//方法一,顺序全部读取:
pRF = fopen("OutData.dat","rb");
if ( NULL == pRF )

perror("读取文件打开失败!");
return;

//将数组置空数据,用来装从文件中读取的数据
memset(myDatas,0x0,sizeof(myDatas));
i = 0;
//未读到文件末尾时循环读取
while ( true )

memset(&tmpData,0x0,sizeof(tmpData));
//从文件中读取一个结构体
fread(&tmpData,sizeof(tmpData),1,pRF);
//判断读是否失败
if ( ferror(pRF) )

fclose(pRF);
perror("读文件过程中失败!");
return;

//文件已读完
if ( feof(pRF) )

break;

//将数据放到数组中
myDatas[i] = tmpData;
i++;

//关闭文件
fclose(pRF);

//输出从文件中读到的数据
for ( i = 0 ; i < 10 ; i++ )

printf("myDatas[i].Num = %d\nmyDatas[i].Data = %f\nmyDatas[i].Name=%s\nmyDatas[i].Len = %f\nmyDatas[i].Ch = %c\nmyDatas[i].IsRight = %d\n\n",
myDatas[i].Num,
myDatas[i].Data,
myDatas[i].Name,
myDatas[i].Len,
myDatas[i].Ch,
myDatas[i].IsRight);


//方法二,读取文件中第三个结构体的数据
pRF = fopen("OutData.dat","rb");
if ( NULL == pRF )

perror("读取文件打开失败!");
return;

memset(&tmpData,0x0,sizeof(tmpData));
//移动文件指针到第三个结构体位置(从文件头移动两个结构体长度,就到了第三个结构体的开始位置)
fseek(pRF,sizeof(struct myStruct) * 2,SEEK_SET);
//从文件中读取一个结构体(就读到了第三个结构体了)
fread(&tmpData,sizeof(tmpData),1,pRF);
//判断读是否失败
if ( ferror(pRF) )

fclose(pRF);
perror("读文件过程中失败!");
return;

//关闭文件
fclose(pRF);
//输出读到的第三个结构体,请与上面的内容比较是否相等?
printf("tmpData.Num = %d\ntmpData.Data = %f\ntmpData.Name=%s\ntmpData.Len = %f\ntmpData.Ch = %c\ntmpData.IsRight = %d\n\n",
tmpData.Num,
tmpData.Data,
tmpData.Name,
tmpData.Len,
tmpData.Ch,
tmpData.IsRight);

getchar();
参考技术B 那代码举个例子吧

#include <stdio.h>
#include <stdlib.h>

struct student

char name[5];
char code[10];
stu[33];

int main()
FILE *in,*out;

if ((out=fopen("ans.txt","w"))==NULL) //写入文件

printf("cant open outfile\n");
exit(0);


scanf("%s",stu[0].code);
scanf("%s",stu[0].name);
fprintf(out,"%s\n",stu[0].code);
fprintf(out,"%s\n",stu[0].name);
fclose(out); //关闭文件

if ((in=fopen("ans.txt", "rb"))==NULL) //再次打开文件,读取

printf("cant open infile\n");
exit(0);


fscanf(in,"%s",stu[0].code);
fscanf(in,"%s",stu[0].name);

printf("%s",stu[0].code);
printf("%s",stu[0].name);

fclose(in);

return 0;

以上是关于c语言关于文件读写的问题的主要内容,如果未能解决你的问题,请参考以下文章

linux系统下,文件存储与数据读写问题(C语言)。

如何用C语言读写文件

用C语言实现文件读写操作

c语言,关于读取csv文件的数据,(一行有四列)显示在屏幕。下面的代码:列数据

QT读写文件的问题

C语言 文件的读写