我们在使用istream类的对象cin进行一行输入的时候 往往遇到N多问题
比如我这样做
char buf [100] ;
cin>>buf ;
cout<<buf ;
这时候如果我们输入了 ddd ddd 那么只会输出 前三个ddd ,从而达不到我们预期的效果 这是因为流的设计是以空字符来结束提取的 ,空格是空字符 所以后面三个d就没有提取到
buf中。
istream提供了 get 和getline 两个函数进行行的读取 ,但是在对于文本文件的操作时候 ,我们无疑选用getline ,这是从他们的提取特性来分析的 。
get在遇到分隔符的时候(默认是换行) 就会停止读取 ,并且以0结束 ,并且不会提取分隔符,分隔符仍保留在输入流里面,当下次再次调用cin.get()的时候那么就会直接返回
而不会读取任何数据,因为在读取开始就遇到了分隔符的缘故 。
getline则不同 他在get的基础上从输入流中删除了 分隔符 并且不保存在结果buffer中 ,从而可以使我们不断的读取一行数据 。
流也提供了许许多多的函数进行功能的测试
!stream 重载了!来测试流是否正确
eof 是否到达文件结尾
bad 是否错误
good是否正确 等等函数
clear 清空流 。。。。
read和wirte则可以对内存块进行读写 我们可以清晰的看到细节部分
原文链接: https://www.cnblogs.com/yuedongwei/archive/2011/12/30/4145556.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/39469
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!