C++的输入输出流

1.面向行的输入
  要获取一行输入,有两种选择:成员函数get()或getline()。两个函数都有三个参数:指向存储结果字符的缓冲区指针、缓冲区大小(不能超过其限度)和知道什么时候停止读输入的终止符。终止符有一个经常用到的缺省值”/n”。两个函数遇到输入终止符时,都把零储存在结果缓冲区里。
其不同点是什么呢?get()遇到输入流的分隔符时就停止,而不从输入流中提取分隔符。如果用同样的分隔符再调用一次get()函数,它会立即返回而不带任何输入。getline()与其相反,它从输入流中提取分隔符,但仍没有把它储存在结果缓冲区里。
  总之,当我们在处理文本文件时,无论什么时候读出一行,都会想到用getline()。

2.输入输出流缓冲

  每一个输入输出流都包含一个指针,指向某种streambuf(这依赖于它是否处理标准I\O、文件、内存等等)。我们可以直接访问streambuf。
当前,我们要知道的最重要的事是:每个输入输出流对象包含一个指向streambuf的指针,而且,如果需要调用的话,streambuf有我们可以调用的成员函数。
  为了允许我们访问streambuf,每个流对象有一个叫做rdbuf()的成员函数,这个函数返回指向对象的streambuf的指针。这样,我们可以为下层的streambuf调用任何成员函数。然而,对streambuf指针所做的最有兴趣的事之一是:使用“<<”操作符将其与另一个输入输出流联结。这使我们的对象中的所有字节流进“<<”左边的对象中。这意味着,如果把一个输入输出流的所有字节移到另一个输入输出流,我们不必做读入它们的一个字节或一行这样单调的工作。

3.在输入输出流中查找
  在某些情况下,可能需要移动这个流的位置,可以用两种方式处理:第一种方式是在流里绝对定位,叫流定位(streampos);第二种方式像标准C库函数fseek()那样做,从文件开始、结尾或当前位置移动给定数目的字节。
流定位(streampos)方法要求先调用“tell”函数:对一个输出流用tellp()函数,对一个输入流用tellg()函数。(”p“指”放指针“,“g”指“取指针”)。要返回到流中的那个位置时,这个函数返回一个streampos,我们以后可以在用于输出流的seekp()函数或用于输入流的seekg()函数的单参数版本里使用这个streampos。
  另一个方法是相对查找,使用seekp()和seekg()的重载版本。第一个参数是要移动的字节数,它可以是正的或负的。第二个参数是查找方向:
  ios::beg 从流的开始位置
  ios::cur 从流的当前位置
  ios::end 从流的末尾位置
  建立读/写文件
  下面的代码首先建立一个有标志的ifstream,它既是一个输入文件又是一个输出文件,编译器不允许我们向ifstream写,因此,需要建立具有基本流缓冲区的输出流(ostream):
  ifstream in(“filename”, ios::in | ios::out);
  ostream out(in.buf());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值