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 ;
}

 

最新文章

  1. UWP消息通知
  2. 1058 N的阶乘的长度
  3. CPU的一些参数和排名
  4. 集合类学习之HashMap经典储存 分拣存储与面向对象组合
  5. uboot里读sd卡内容
  6. [置顶] AFNetworking 2.0 新特性讲解之AFHTTPSessionManager
  7. (转)轻量级数据库 SQLite
  8. java日期处理 calendar 和date
  9. 随心所欲~我也做个集合遍历器吧(自己的foreach,委托的威力)
  10. 怎样设制 select 不可编辑 仅仅读
  11. cocoaPods的安装使用 以及 Carthage
  12. 团队作业8——第二次项目冲刺(Beta阶段)5.20
  13. PhpStorm常用的一些快捷键
  14. BZOJ 4195: [Noi2015]程序自动分析 并查集+离散化
  15. Django 中文和时区设置
  16. 在pycharm中运行python程序
  17. 机器学习技术点----apachecn的github地址
  18. python-enumerate方法
  19. cf 459E
  20. 枚举1--求小于n的最大素数

热门文章

  1. Java se 知识图解
  2. 集训Day11
  3. kettle每天自动发送邮件总结_20161128
  4. codevs 3049 舞蹈家怀特先生
  5. IE滚动条
  6. 使用msiexec提取msi包里的文件
  7. vs2012解决scanf,printf编译出错的问题
  8. linux下Redis以及c++操作
  9. PCB上的导线 怎么开窗 去掉绿油 把铜皮裸露
  10. mogilefs分布式文件存储