鱼C论坛

 找回密码
 立即注册
查看: 3274|回复: 7

文件操作问题

[复制链接]
发表于 2016-3-22 14:45:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4. typedef struct Student {
  5.         char name[20];
  6.         char password[10];
  7.         int num;       
  8. }student;
  9. int main(int argc, char *argv[]) {
  10.         student x;
  11.         FILE *fp;
  12.         int count,filesize;
  13.         fp=fopen("/zpy.txt", "r");
  14.         fseek(fp,0,SEEK_END);//定位到文件尾
  15.         filesize=ftell(fp);
  16.         count=filesize/sizeof(student);//计算结构体数量
  17.         for(int i=0;i<count;i++){
  18.                 fread(&x,sizeof(student),1,fp);
  19.                 printf("%s %s %d\n",x.name,x.password,x.num);
  20.         }
  21.         fclose(fp);
  22.         return 0;
  23. }
复制代码

跑出来结果是不对的,我又稍微试了下
结论是程序把文件里的所以东西都按一个字符串出来了,
那么,文件要怎么写才能让程序正确读取?
屏幕快照 2016-03-22 下午2.41.25.png
屏幕快照 2016-03-22 下午2.39.47.png
屏幕快照 2016-03-22 下午2.39.58.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-22 14:46:04 | 显示全部楼层
这是文件
屏幕快照 2016-03-22 下午2.45.29.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-22 18:41:26 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-22 20:47:24 | 显示全部楼层
本帖最后由 ℡.xiao敏 于 2016-3-22 20:55 编辑

你好,我试试给你点思路。
你这种直接读取结构的方式是不行的……
要先搞清楚怎么读写……一般存储结构数据,会用xml或者ini格式来存储。你非要txt也行。
数据最好写成:
xiaoming|xiao|3
这样为一行,每读取一行,就用"|"分隔符分割,再分别存入你的结构。再读出来……
txt文本不是内存,可以直接结构名字就是指针……所以是不同的概念哦。

另外建议你用:CStdioFile类来读写文件,更方便,下面给你伪代码参考下


  1.         if (cstdiofile.Open(文件地址,CFile::modeReadWrite,NULL))
  2.         {
  3.                 int i = 0;
  4.                 for(;;)
  5.                 {
  6.                         if (cstdiofile.ReadString(tmp))        //读取一行。如果最后一行,就返回0.
  7.                         {
  8.                                 _Split(tmp,cs,"|");        //分隔符用"|"
  9.                                 if (3 == cs.GetSize())
  10.                                 {
  11.                                         你的结构.name = cs[0];
  12.                                         你的结构.password = cs[1];
  13.                                         你的结构.num = cs[2];
  14.                                 }
  15.                         }
  16.                         else       
  17.                                 break;
  18.                         i++;
  19.                 }
  20.         }
  21.         cstdiofile.Close();
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-22 22:38:35 | 显示全部楼层
楼主,用的什么编译器?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-23 01:23:15 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-23 10:26:49 | 显示全部楼层
小学期 发表于 2016-3-22 22:38
楼主,用的什么编译器?

codeunner   OSX平台上的我不确定有没有Windows版
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-23 11:12:06 | 显示全部楼层
machimilk 发表于 2016-3-23 01:23
给你一个地址参考一下吧
http://www.cnblogs.com/skyme/archive/2011/01/09/1931396.html

也就是说文件要自己用程序写是么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-19 01:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表