学习 primer 第8章 IO库 小结
iostream处理控制台IO
fstream处理命名文件IO
stringstream完成内存string的IO
非常重要!!!!!!!!!!
=============================================================================
1 cin是一个istream对象 是从标准输入读取数据
2 cout是一个ostream对象 是从标准输出写入数据
3 cerr一个ostream对象 通常输出程序的错误消息 写入到标准错误
4 >>运算符 是用来从一个istream对象读取输入数据
5 <<运算符 是用来从一个ostream对象写入输出数据
6 getline函数 是从一个给定的istream 读取一行数据 存入一个给定的string对象中
(插入讲下getline函数以及 << 运算符)
使用getline(cin,line)读取一整行:line是一个string类型 , 有时候希望在最终的得到的字符串中 保留输入时候的空白符 这时应该用getline函数代替原来的>>运算符。
getline函数的参数是一个输入流和一个string对象 函数从输入流中读入内容 直到遇到换行符为止(注意换行符也被读进去了),然后将所有的内容存入到那个string对象中去(不存换行符)。getline只要一遇到换行符就结束读取操作并返回结果。
和输入运算符一样 getline也返回他的流参数 因此既然输入运算符能作为判断条件 也就能用getline的结果作为条件
例1:while(std::cin>>value) //int value
while循环条件的求值就是执行表达式:std::cin >> value 此表达式从标准输入读取下一个数,保存在value中 输入运算符返回其左侧运算符对象,就是std::cin。实际就是检测std::cin。 当使用istream对象作为条件时,其效果就是检测流状态。 有效流 即未遇错误,检测ok。 当遇到文件结束 或遇到一个无效输入时(例如读入的值不是一个整数),istream对象的状态会变为无效。无效状态的istream对象会使条件变为假。
=============================================================================
类fstream 和 stringstream都是继承自类iostream的。
输入都是继承自istream 输出都是继承自ostream 。因此 可以在istream对象上执行的操作,也都可以在ifstream和istringstream对象上面执行 。继承自ostream的输出类也有类似情况!
IO对象无拷贝或赋值(理解就好)书上p279
一个流一旦发生错误 其后续的IO操作都会失败。只有一个流处于无错误状态 才可以从他读取数据 or写入数据
while(cin >> i) 什么情况下循环会over? 1 文件over (linux中 ctrl+d(文件结束符)) I/O流错误 3 无效数据
理解管理输出缓冲区刷新几种情况 注意(调试程序要及时刷新输出缓冲区 有利于定位bug)
5 还有其他一些零碎的知识在看书吧!!!!!
最后一个demo 仔细读一读!
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
using namespace std; int main(){
ifstream in("data");//就是读取当前目录下面这个data文件了
if(!in){ //这里就是要检测下流是否ok 好习惯
cerr<<"do not open inputfile"<<endl;
return -;
}
//====================================================================
//添加一个 out输出对象 测试下看看
ofstream out("data1");
if(!out){ //这里就是要检测下流是否ok 好习惯
cerr<<"do not open inputfile"<<endl;
return -;
}
out<<"zhangkele github zhangkele1221@163.com";
//我们正常的cout<<" "; 是将" "内容定向到屏幕文件 这次定向到自己规定的文件里
//这里运用了<<输出运算符号向out对象写入 ok明白意思了吧
out.close();//好习惯 要关闭打开的流对象 除非局部的流对象他会自己析构掉
//=========================================================================== string line;
vector<string> words;
while(in>>line){//也是需要理解的 和下面的一样需要自己阅读primer书
//while(getline(in,line)){//需要彻底的理解getline函数的原理
words.push_back(line);
} in.close();//好习惯 要关闭打开的流对象 除非是局部的流对象他会自己析构掉 auto it = words.begin();
while(it!=words.end()){
cout<<*it<<endl;
++it;
}
return ;
}
学习 primer 第8章 IO库 小结的更多相关文章
- [C++ Primer] 第8章: IO库
IO类 iostream定义了读写流的基本类型 istream, wistream 从流读取数据 ostream, wostream 向流写入数据 iostream, wiostream 读写流 fs ...
- 第 8 章 IO库
第 8 章 IO库 标签: C++Primer 学习记录 IO库 第 8 章 IO库 8.1 IO类 8.2 文件输入输出 8.1 string流 8.1 IO类 IO对象无拷贝或赋值,因此不能将形参 ...
- c++ primer 学习杂记3【标准IO库】
第8章 标准IO库 发现书中一个错误,中文版p248 流状态的查询和控制,举了一个代码例子: int ival; // read cin and test only for EOF; loop is ...
- 《C++ Primer》笔记 第8章 IO库
iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型. 标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制 ...
- 【c++ Prime 学习笔记】第8章 IO库
C++语言不直接处理输入输出,而是通过标准库中的一组类来处理IO 1.2节介绍的IO库: istream(输入流)类型,提供输入 ostream(输出流)类型,提供输出 cin,是istream对象, ...
- 《C++primer》v5 第8章 IO库 读书笔记 习题答案
8.1.8.2 这一章不咋会啊.. istream &read(istream &is) { int a; auto old_state=is.rdstate(); is.clear( ...
- C++ Primer 5th 第8章 IO库
IO类对象不允许进行拷贝操作. IO类中定义后一些函数和标志,可以用于访问和操作流的状态. 一旦流发生错误,后续IO操作都是失败的. 读写IO对象会改变IO对象的状态. 每个输出流都管理一个缓冲区. ...
- C++primer第三章标准库类型
除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...
- C++Primer,C++标准IO库阅读心得
IO 标准库类型和头文件 iostream istream 从流中读取 ostream 写到流中去 iostream 对流进行读写:从 istream 和 ostream 派生而来fstream if ...
随机推荐
- scala初步
1 安装 http://scala-ide.org/ http://scala-lang.org/
- android自定义控件(二) 入门,继承View
转载请注明地址:http://blog.csdn.net/ethan_xue/article/details/7313788 ps: 可根据apidemo里LableView,list4,list6学 ...
- resEdit
resEdit:一个图形界面编辑工具,它不但可以用来编写程序所图形界面(如修改图标.菜单.鼠标.版本信息等),还支持了对exe.dll等执行文件内的资源(图标.菜单.鼠标指针.位图.版本信息)等进行修 ...
- 解决 sublime text3 运行python文件无法input的问题
怎么输入都没有用,原来需要配置可交互环境来运行 首先,Ctrl+Shift+p快捷键,弹出框框输入 install Package,回车后又弹出一个框,输入SublimeREPL(要安装的插件名字), ...
- dataguard类型转换与模式转化
修改数据保护模式步骤 前提:是否满足转换模式的配置要求 最大保护(Maximum Protection):Standby Database 必须配置Standby Redo Log,Primary D ...
- SHOI2001化工厂装箱员——记忆化搜索
题目:https://www.luogu.org/problemnew/show/P2530 太弱了不会用DP,于是暴搜: 每次传进一个数组c记录当前状态各种物品有多少个,枚举取哪种物品,返回最小值, ...
- ubuntu_deb安装命令
dpkg命令常用格式如下: sudo dpkg -I iptux.deb#查看iptux.deb软件包的详细信息,包括软件名称.版本以及大小等(其中-I等价于--info) sudo dpkg -c ...
- ReSIProcate环境搭建
1首先下载resiprocate-1.6 2取消resiprocate-1.6目录的只读属性 3然后使用Visual Studio 2008打开resiprocate-1.6下的reSIProcate ...
- SimpliciTI协议地址分配
1.多个ED节点和AP正确连接后,AP都会给ED分配一个相应的地址.当某个ED出现意外,比如电源问题,和AP断开连接,AP并不将该ED节点的地址消除.当该ED恢复正常,重新申请加入网络时,AP会检测该 ...
- Unique Binary Search Trees-计算表示相同序列的不同BST个数
题目描述: 给定整数n,计算存储序列为1...n的结构唯一的BST的个数 题目来源: http://oj.leetcode.com/problems/unique-binary-search-tree ...