| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 440 人关注过本帖
标题:随机访问2进制文件的问题
只看楼主 加入收藏
lyj23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:140
注 册:2010-10-31
结帖率:86.21%
收藏
已结贴  问题点数:10 回复次数:4 
随机访问2进制文件的问题
程序代码:
/* 有五个学生数据,要求:
(1)把它们放到磁盘文件中;
(2)把磁盘文件中的第1,3,5个学生的数据读入程序,并显示出来;
(3)将第3个学生的数据修改后存回磁盘文件中的原有位置。*/
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
struct student
{

 int num;

 char name[20];

 float score;
};
int main()
{student stud[5]={1001,"LI",58,1002,"Fun",90,1003,"Da",96,1004,"Ma",78,1005,"Sa",98}
fstream iofile("stud.dat",ios::in|ios::out|ios::binary);
if(!iofile)
{

 cout<<"open error!"<<endl;

 getch();

 exit(1);
}
for(int i=0;i<5;i++)

 iofile.write((char*)&stud[i],sizeof(stud[i]));
student stud1[5];
for(int i=0;i<5;i=i+2)

 {iofile seekg(i*sizeof(stud1[i]),ios::beg);//下面的i/2是什么意思,为什么i/2以后就能到stud1中的,1,3,5号?
  iofile.read((char*)&stud1[i/2],sizeof(stud1[0]));
  cout<<stud1[i/2].num<<" "<<stud1[i/2].name<<" "<<stud1[i/2].score<<endl;

 }
cout<<endl;
stud2.num=1012;
strcpy(stud[2].name,"Wu");//这里一定要用复制函数,strcpy()?用stud[2].name="Wu";为什么不行?
stud[2].score=100;//我记得以前看到过原因,现在忘了。。高手指教
iofile.seekp(2*sizeof(stud[0]),ios::beg);
iofile.write((char *)&stud[2],sizeof(stud[2]));
iofile.seekg(0,ios::beg);
for(int i=0;i<5;i++)
{

 iofile.read((char *)&stud1[i],sizeof(stud[i]));

 cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<" "<<endl;
}
iofile.close();
getch();
return 0;
}
搜索更多相关主题的帖子: 数据 
2011-05-08 09:02
fangdong65
Rank: 5Rank: 5
等 级:职业侠客
帖 子:73
专家分:301
注 册:2011-4-1
收藏
得分:5 
for(int i=0;i<5;i=i+2)
{iofile seekg(i*sizeof(stud1[i]),ios::beg);//下面的i/2是什么意思,为什么i/2以后就能到stud1中的,1,3,5号?
  iofile.read((char*)&stud1[i/2],sizeof(stud1[0]));
  cout<<stud1[i/2].num<<" "<<stud1[i/2].name<<" "<<stud1[i/2].score<<endl;
}
得到stud1中的1,3,5号与i/2无关而是与上两句有关,stud1[i/2]只是一个临时存储数据的变量,你也可以另行定义一个studtemp取代它,效果是一样的
字符串赋值不能用=号只能用strcpy(),对于数值型,字符型可以用=赋值
2011-05-08 09:34
lyj23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:140
注 册:2010-10-31
收藏
得分:0 
程序代码:
for(int i=0;i<5;i=i+2)
{iofile seekg(i*sizeof(stud1[i]),ios::beg);//这里不是把指针定位于0,2,4学生数据开头吗? 
iofile.read((char*)&stud1[i/2],sizeof(stud1[0]));//为什么这里写进去的1,3,5号的
  cout<<stud1[i/2].num<<" "<<stud1[i/2].name<<" "<<stud1[i/2].score<<endl;
}
2011-05-08 09:55
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:5 
就没有下标5。、、是定位到0、2、4、读取的也是0、2、4号元素、

离恨恰如春草,更行更远还生。
2011-05-08 10:57
lyj23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:140
注 册:2010-10-31
收藏
得分:0 
哦,是题目。。0就是1,为了按照生活习惯把0看作1对吧!
2011-05-08 18:21
快速回复:随机访问2进制文件的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013474 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved