c语言关于文件读写的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言关于文件读写的问题相关的知识,希望对你有一定的参考价值。
我定义了结构体struct student stu[33](里面有name code)
然后把他们都写入文件中
我想问一下怎么把他们 读出来
顺序还是原来的顺序
#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语言关于文件读写的问题的主要内容,如果未能解决你的问题,请参考以下文章