文件操作问题
#include <iostream>#include <stdio.h>
using namespace std;
typedef struct Student {
char name;
char password;
int num;
}student;
int main(int argc, char *argv[]) {
student x;
FILE *fp;
int count,filesize;
fp=fopen("/zpy.txt", "r");
fseek(fp,0,SEEK_END);//定位到文件尾
filesize=ftell(fp);
count=filesize/sizeof(student);//计算结构体数量
for(int i=0;i<count;i++){
fread(&x,sizeof(student),1,fp);
printf("%s %s %d\n",x.name,x.password,x.num);
}
fclose(fp);
return 0;
}
跑出来结果是不对的,我又稍微试了下
结论是程序把文件里的所以东西都按一个字符串出来了,
那么,文件要怎么写才能让程序正确读取?
这是文件 @machimilk @黑龍 @ryxcaixia @仰望天上的光 本帖最后由 ℡.xiao敏 于 2016-3-22 20:55 编辑
你好,我试试给你点思路。
你这种直接读取结构的方式是不行的……
要先搞清楚怎么读写……一般存储结构数据,会用xml或者ini格式来存储。你非要txt也行。
数据最好写成:
xiaoming|xiao|3
这样为一行,每读取一行,就用"|"分隔符分割,再分别存入你的结构。再读出来……
txt文本不是内存,可以直接结构名字就是指针……所以是不同的概念哦。
另外建议你用:CStdioFile类来读写文件,更方便,下面给你伪代码参考下
if (cstdiofile.Open(文件地址,CFile::modeReadWrite,NULL))
{
int i = 0;
for(;;)
{
if (cstdiofile.ReadString(tmp)) //读取一行。如果最后一行,就返回0.
{
_Split(tmp,cs,"|"); //分隔符用"|"
if (3 == cs.GetSize())
{
你的结构.name = cs;
你的结构.password = cs;
你的结构.num = cs;
}
}
else
break;
i++;
}
}
cstdiofile.Close(); 楼主,用的什么编译器? 给你一个地址参考一下吧
http://www.cnblogs.com/skyme/archive/2011/01/09/1931396.html 小学期 发表于 2016-3-22 22:38
楼主,用的什么编译器?
codeunner OSX平台上的我不确定有没有Windows版 machimilk 发表于 2016-3-23 01:23
给你一个地址参考一下吧
http://www.cnblogs.com/skyme/archive/2011/01/09/1931396.html
也就是说文件要自己用程序写是么?
页:
[1]