学习 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 ...
随机推荐
- spring的了解以及简单框架的搭建
了解spring: Spring是一个开源的控制反转(Inversion of Controller)和面向切面(AOP)的框架,目的是为了简化开发. IOC(控制反转): public class ...
- find命令的基础用法以及按文件修改时间查找文件
一般文件查找方法: find 命令学好是一件很有趣的事情,也可以帮你在查找系统文件的时候事倍功半,还可以与正则表达式结合使用,功能强大,是一个很好的查找工具.可以整体提高你的系统管理能力. 基础用法 ...
- nginx 反向代理配置
转载一篇特别好的nginx配置博文:http://www.cnblogs.com/hunttown/p/5759959.html
- QT(2)项目文件介绍
一.项目创建 二.文件说明 三.QT模块
- Scala学习——集合的使用和“_”的一些使用(中)
1.空格加_可以表示函数的原型 命令行代码: scala> def fun1(name:String){println(name)} fun1: (name: String)Unit scala ...
- DCloud-HTML5+:barcode
ylbtech-DCloud:barcode&camera 1.返回顶部 1. http://www.html5plus.org/doc/zh_cn/barcode.html 2. Barco ...
- 怎么解决sublime的插件自动被禁用
前两天,我的sublime text安装的很多插件都被自动禁用了,每次都要我自己重新启用一下才可以,后来从网上找到了解决方法. 找到“设置”-“Package Settings”-“Package C ...
- 【转】eclipse修改workspace
[转]eclipse修改workspace 以下方法选其中一种 1.进入 Window > Preferences > General > Startup and Shutdown ...
- 1、CDH集群搭建
一.准备工作 1.系统环境 系统centos6.5 节点三台: 192.168.1.130 192.168.1.131 192.168.1.132 1.所有节点关闭防火墙 service iptabl ...
- 以交互方式将文本添加到图形中(matlab)
这篇博客记录一下怎么用matlab在图形中简单的添加一些文本,以直方图均衡化为例.先看几张图片吧,第一幅是较暗的花粉的电子显微图像和对应的直方图,第二幅是其直方图均衡化的图像和对应的直方图,第三幅是对 ...