学习 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 ...
随机推荐
- rust borrow and move
extern crate core; #[deriving(Show)] struct Foo { f : Box<int> } fn main(){ let mut a = Foo {f ...
- 「USACO08DEC」「LuoguP2922」秘密消息Secret Message(AC自动机
题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret bin ...
- Linux User
1.用户的工作目录,在/etc/passwd中查看 2.如果shell=bin/false(正常为bin/bash)代表禁止登录,这样就无法登录以及通过su进行切换: 3.修改,usermod -d ...
- WPF Background的设置有坑
今天帮忙同事解决在后台绑定时,动态更改控件(Grid)的Background. 有个陷阱,C#有2个命名空间有Brush和Color, 分别为System.Drawing和System.Window. ...
- python mysqldb 教程
MySQL Python 教程 (1)下面是在Python中使用MySql数据库的教程,涵盖了Python对MySql的基础操作,主要采用了MySQLdb模块,下面的代码都是基于Ubuntu Linu ...
- chromium浏览器开发系列第四篇:如何调试最新chromium
接二连三的事情,时间比较紧张,但是还是没有把这个系列的文章丢掉,因为这也是对自己知识的总结吧.提倡大家多写写,以后再看的时候会有种莫名的小激动. 上周写的是chromium的目录结构,好像大家不太感兴 ...
- hdu4886 TIANKENG’s restaurant(Ⅱ) (trie树或者模拟进制)
TIANKENG’s restaurant(Ⅱ) Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 130107/65536 K (Ja ...
- 3.7-3.9 HBase表属性
一.表压缩 1.HBase Sanppy HBase Sanppy 1)配置Haodop压缩 [beifeng@hadoop-senior hadoop-2.5.0]$ bin/hadoop chec ...
- SPFA算法——最短路径
粗略讲讲SPFA算法的原理,SPFA算法是1994年西南交通大学段凡丁提出 是一种求单源最短路的算法 算法中需要用到的主要变量 int n; //表示n个点,从1到n标号 int s,t; //s ...
- 判断ip地址是否为内网ip或局域网ip
bool IsLanIp(string& ip) { ,) == ,) == ,) == "192.") { return true; } else { return fa ...