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库 小结的更多相关文章

  1. [C++ Primer] 第8章: IO库

    IO类 iostream定义了读写流的基本类型 istream, wistream 从流读取数据 ostream, wostream 向流写入数据 iostream, wiostream 读写流 fs ...

  2. 第 8 章 IO库

    第 8 章 IO库 标签: C++Primer 学习记录 IO库 第 8 章 IO库 8.1 IO类 8.2 文件输入输出 8.1 string流 8.1 IO类 IO对象无拷贝或赋值,因此不能将形参 ...

  3. c++ primer 学习杂记3【标准IO库】

    第8章 标准IO库 发现书中一个错误,中文版p248 流状态的查询和控制,举了一个代码例子: int ival; // read cin and test only for EOF; loop is ...

  4. 《C++ Primer》笔记 第8章 IO库

    iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型. 标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制 ...

  5. 【c++ Prime 学习笔记】第8章 IO库

    C++语言不直接处理输入输出,而是通过标准库中的一组类来处理IO 1.2节介绍的IO库: istream(输入流)类型,提供输入 ostream(输出流)类型,提供输出 cin,是istream对象, ...

  6. 《C++primer》v5 第8章 IO库 读书笔记 习题答案

    8.1.8.2 这一章不咋会啊.. istream &read(istream &is) { int a; auto old_state=is.rdstate(); is.clear( ...

  7. C++ Primer 5th 第8章 IO库

    IO类对象不允许进行拷贝操作. IO类中定义后一些函数和标志,可以用于访问和操作流的状态. 一旦流发生错误,后续IO操作都是失败的. 读写IO对象会改变IO对象的状态. 每个输出流都管理一个缓冲区. ...

  8. C++primer第三章标准库类型

    除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...

  9. C++Primer,C++标准IO库阅读心得

    IO 标准库类型和头文件 iostream istream 从流中读取 ostream 写到流中去 iostream 对流进行读写:从 istream 和 ostream 派生而来fstream if ...

随机推荐

  1. cookie的保存与提取

    爬虫过程中,cookie可以保留用户与服务器之间的交互信息,使服务器与用户相互能够识别.由于HTTP协议是无状态协议,即不能够识别客户端身份,即使客户端多次请求同一个url服务器仍然响应.这种协议导致 ...

  2. vs2012解决scanf,printf编译出错的问题

    转自http://www.th7.cn/Program/c/201303/127343.shtml 在VS 2012 中编译 C 语言项目,如果使用了 scanf 函数,编译时便会提示如下错误: er ...

  3. 相对路径转绝对路径C++实现

    #include<iostream> #include<string> #include<vector> using namespace std; //相对路径转绝 ...

  4. 蓝桥杯Log大侠(线段树单点区间更新)

    标题:Log大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力... 变换的规则是: ...

  5. 如何用CSS实现矩形按钮右边缘的中间有个往里凹的小半圆

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  6. sql中内联&nbsp;和外联&nbsp;区别

    sql中内联 和外联 区别 2007-05-15 17:37 这个概念一般看书不好理解.其实夜简单.有例子就简单了. 比如: 表A(主表) cardid username 16 aa 23 bb 25 ...

  7. 6、scala面向对象-对象

    一.对象 1.object object,相当于class的单个实例,通常在里面放一些静态的field或者method,第一次调用object的方法时,就会执行object的constructor, ...

  8. JS中map list 数组的迭代

    后台传给前台一个map 前台如何迭代呢 $.post("getSys.jhtml", function(data){ var temp = ""; $.each ...

  9. window安装android打包环境

    1.下载jdkhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载:jdk-8u1 ...

  10. Unity 5 全局光照GI与新的烘焙系统初探

    http://blog.csdn.net/sparrowfc/article/details/45650013 GI是啥 Realtime GI,实时全局光照,听上去就是一个非常高大上的词,但是越高大 ...