| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3238 人关注过本帖
标题:[讨论]请教高手seekg(0), 为什么不好用了??
只看楼主 加入收藏
yfuy23
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2004-7-12
收藏
 问题点数:0 回复次数:8 
[讨论]请教高手seekg(0), 为什么不好用了??

#include<iostream.h>//cout #include<fstream.h> //fstream

int main(int argc,char * *argv)

{ int i(0); int num[20]; char buffer[100]; ifstream myf(argv[1],ios::nocreate);

while(!myf.eof()) { myf.getline(buffer,100,'\n'); i++; } cout<<i<<endl;//i表示文件的行数 for(int j(0);j<20;j++) num[j]=0; for(int m(0);m<20;m++) { myf.seekg(0);//此处的seekg(0)不起作用,用myf.seekg(0,ios::beg)也不起作用 // 为什么不能把指针指向文件流的开始

while(!myf.eof()) { myf.getline(buffer,100,'\n'); num[m]++; } cout<<num[m]<<" ";//再次输出文件的行数 }

return 0; } 我找个一个56行的文件实验

运行的结果为:

56

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

为什么在for中的seekg(0)不起作用呢??

搜索更多相关主题的帖子: seekg 讨论 
2004-08-20 16:40
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节 那个0是偏移量呢,不是定位位置。

http://www.hktk.com/soft/program/article/cbuilder/cbuilder521.html

[此贴子已经被作者于2004-08-20 18:38:00编辑过]

2004-08-20 17:55
yfuy23
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2004-7-12
收藏
得分:0 

高手,我知道seekg(0)中的0是偏移量,不是这个问题。seekg(0)和seekg(0,ios::beg)是一样的ios::beg是默认的参数。seekg(0)和seekg(0,ios::beg)都是表示将文件流的指针从头开始移动0个指针(也就是指向文件的头部)。这一点以下程序可以说明。

#include<iostream.h>//cout #include<fstream.h> //fstream #include<conio.h> //getche() #include<stdlib.h>//remove

int main(int argc,char * *argv)

{ int i(0),j(0),p(0); int num[20]; char buffer[100]; ifstream myf(argv[1],ios::nocreate);

while(!myf.eof()) { p++; myf.getline(buffer,100,'\n'); i++; if(p==40) break; } cout<<i<<endl;//i表示文件的行数 myf.seekg(0);//这个seekg(0)起了作用 while(!myf.eof()) {

myf.getline(buffer,100,'\n'); j++; } cout<<j<<endl; for(int k(0);k<20;k++) num[k]=0; for(int m(0);m<20;m++) { myf.seekg(0); while(!myf.eof()) { myf.getline(buffer,100,'\n'); num[m]++; } cout<<num[m]<<" "; }

return 0; } 运行的结果为

40

56

0 0 0。。。。。。

这个程序还说明当myf.eof()=1的情况下 seekg就失效了, 你说的seekg(-200,ios::cur)也起不了作用。我现在想问用什么方法可以改变使seekg重新起作用。或者怎样改变myf.eof的值,是不是改变以后(我不知道怎样改变)seekg就能起作用了。

2004-08-21 14:53
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

噢~~~晕~~~你问倒我了,我也是初学者,在研究MFC中……

不好意思,帮不到,不过我不会放弃,我们一起研究一下。

[此贴子已经被作者于2004-08-23 00:48:50编辑过]

2004-08-23 00:47
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

刚才想了好久,暂时得出这样结论:

#include<iostream.h> #include<fstream.h>

void main(int argc,char *argv[]) { int line=0; char buffer[100]; ifstream file("live41.txt",ios::nocreate);

while(!file.eof()) { file.getline(buffer,100,'\n'); line++; } cout<<line<<endl; //以上为第一次 file.seekg(0,ios::beg); //放在外面试一试

while(!file.eof()) //再来一次,结果跳过了循环 { file.getline(buffer,100,'\n'); line++; } cout<<line<<endl; //输出仍然是15没有变化

//以上说明就算把函数放在外面也是不行,不单在循环 //也可能是,函数根本不是这样用的,应该另有用法

for(int m=0;m<20;m++) { int num=0; //这里不用数组浪费空间 file.seekg(0,ios::beg); while(!file.eof()) { file.getline(buffer,100,'\n'); num++; } cout<<num<<" "; } cout<<endl; }

2004-08-24 20:57
yfuy23
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2004-7-12
收藏
得分:0 

你的这个程序说明什么问题了呀??

我看了,也运行了,但是我说的问题还是存在呀

另外你的头像挺可爱的,呵呵

2004-08-25 17:20
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

我是想说,你原来以为问题只是在循环里seekg()就用不了了,但是我在循环外也实现不了把指针指向文件头啊!可能是用得不对了,不过我会继续努力,一齐努力。另外我也有个问题想请教,我的VC只能用seekg()而不能用seekp(),为什么呢?想破头了……

[此贴子已经被作者于2004-08-25 21:00:04编辑过]

2004-08-25 20:58
yfuy23
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2004-7-12
收藏
得分:0 

我是说当对同一个文件对象,当file.eof()=1的时候seekg就不好用了,和循环没有什么关系

在循环内和循环外都是一样的。当file.eof()=0的时候seekg是好用的。也就是说当一个文件读到尾部以后,不能再用seekg来移动或者定位了。通过建立该文件新的对象能解决这个问题,但是在需要读文件到尾部的次数非常多的 情况下,我觉得这样不太好。所以想问下,怎么在file.eof()=1的时候怎么让seekg起作用,或者能不能改变file.eof()的值。

另外你说seekp不好用是什么意思??

seekp是ofstream类的函数,不是ifstream的对象

2004-08-26 08:57
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

懂了,谢谢,反倒要请教你了,不好意思,呵呵……

我下去再想一下,不要放弃。

2004-08-26 10:22
快速回复:[讨论]请教高手seekg(0), 为什么不好用了??
数据加载中...
 
   



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

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