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

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

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

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

2004-08-25 17:20
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
快速回复:[讨论]请教高手seekg(0), 为什么不好用了??
数据加载中...
 
   



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

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