C++ Primer Plus 之 输入、输出和文件
来源:互联网 发布:c语言函数头 编辑:程序博客网 时间:2024/06/07 20:27
一 、流、缓冲区和iostream文件
c++将输入和输出看作字节流。输入时,程序从输入流中抽取字节;输出时,程序将字节插入输出流。通过使用缓存区可以更高效地处理输入输出。缓冲区是用作中介的内存块,它是将信息从设备输到程序或从程序输给设备的临时存储工具。通常,像磁盘驱动器这样的设备以512字节(或更多)的块为单位来传输数据,而程序通常每次只能处理一个字节的信息。缓冲区帮助匹配这两种不同的信息传输速率。从磁盘文件中读取每一个字节需要大量的硬件活动,速度非常慢。缓冲方法则从磁盘中读取大量的信息存储在缓冲区里,然后再从缓冲区里读取一个字节。因为从内存中读取单个字节的速度比从硬盘里读取快很多,所以这种方法更快也更方便。当然达到缓冲区尾部后,程序将从磁盘里读取另一块数据。输出时,程序首先填满缓冲区,然后把整块缓冲区传输给硬盘,并清空缓冲区,以供下一批输出使用。这个过程称为刷新缓冲区(flush the buffer)。键盘输入每次提供一个字符,这种情况下程序无需缓冲区来匹配不同的数据传输速率。但是,对键盘输入进行缓冲能让用户在将输入传输给程序前返回并修改。c++通常在用户按下回车键时刷新输入缓存区。
- streambuf类为缓冲区提供内存,并提供用于填充缓冲区、访问缓冲区、刷新缓冲区和管理缓冲区内存的类方法。
- iso_base类表示流的一般方法,如是否可读取、是二进制流还是文本流等。
- iso类基于iso_base类,其中包括类一个指向streambuf对象的指针成员。
- ostream类派生自iso类,提供输出方法。
- istream类派生自iso类,提供输入方法。
- iostream基于ostream和istream,因此继承类输入输出方法。
包含iostream头文件将自动创建8个流对象,4个用于窄字符流,4个用于宽字符流。
- cin对象对应标准输入流,默认关联到键盘。wcin类似,但处理的是wchar_t类型。
- cout对象对应标准输出流,默认关联到显示器。wcout类似,但处理的是wchar_t类型。
- cerr对象对应标准错误流,用于显示错误信息。默认关联到显示器。该流没有被缓冲,意味着将被直接发送到屏幕,而不会等到缓冲区填满或新的换行符。wcerr类似,但处理的是wchar_t类型。
- clog对应标准错误流,默认关联到显示器,该流被缓冲。wclog类似,但处理的是wchar_t类型。
二、 cout输出
2.1 重载的<<运算符
<<称为插入运算符,被重载后能识别c++中所有的基本数据类型,其典型原型如下:
ostream & operator<<(int)
还能识别下面的指针类型
- const signed char *;
- const unsigned char*;
- const char *;
- const void*
从ostream & operator<<(type)可以看出,<<函数返回的指向调用该运算符的对象的引用。因此可以通过插入运算符来连接输出。
2.2 刷新缓冲区
- 发送换行符'\n';
- c++会在输入即将发生时刷新缓冲区;
- cout << flush;
- cout << endl; endl不仅刷新缓冲区还插入换行符;
2.3 格式化输出
浮点数的默认行为:浮点类型被显示为6位,末尾的0不显示(注意,显示的数字位数和数字被存储时的精度没有任何关系)。数字当指数大于等于6或小于等于-5时,用科学计数法表示。
2.3.1 进制
- std::dec 十进制
- std::oct 八进制
- std::hex 十六进制
2.3.2 头文件<iomanip>
- setw() 设置字段宽度,只影响下一个项目。
- setfill() 填充字段,一直有效,直到更改为止。
- setprecision() 设置精度,一直有效,直到更改为止。
三、 cin输入
>>称为抽取运算符, 能识别c++所有的基本数据类型,其典型原型如下:
istream &operator >> (int &) //参数和返回值都是引用,使得输入能够拼接起来
还能识别下面的指针类型
- const signed char *;
- const unsigned char*;
- const char *;
- const void*
3.1 cin>>检查输入
>>查看输入流时,跳过空白符(空格、制表符、换行符),直到遇到非空白符。也就是说它读取非空白符开始,到与目标类型不匹配的第一个字符之间的全部内容。例如:string name;int age;char sex;cin >> name >> age >> sex;cout << "name is : " << name << endl;cout << "age is : " << age << endl;cout << "sex is : " << sex << endl;//cin: tom 18m//name is :tom//age is :18 //18m与int行的age不匹配,故只读到18,剩下的被sex读取。如果输入的是abc,则不会修改age值,>>返回0.用于if或while判断//sex is :m
3.2 流状态
cin和cout对象包含描述流状态的数据成员。流状态(被定义为iostate类型,而iostate是一种bitmask,即位掩码)由三个元素组成:eofbit,badbit和failbit,其中每个元素都是一位,取值1(设置)或0(清除)。template<class _Dummy>const typename _Iosb<_Dummy>::_Iostate _Iosb<_Dummy>::goodbit;template<class _Dummy>const typename _Iosb<_Dummy>::_Iostate _Iosb<_Dummy>::eofbit;template<class _Dummy>const typename _Iosb<_Dummy>::_Iostate _Iosb<_Dummy>::failbit;template<class _Dummy>const typename _Iosb<_Dummy>::_Iostate _Iosb<_Dummy>::badbit;
0 0
- C++ Primer Plus 之 输入、输出和文件
- C++ Primer Plus 第17章 输入,输出和文件
- c++primer plus第十七章-cin输入、cout输出和文件I/O
- 《C++ primer plus》第十七章 输入、输出和文件(一):输入和输出 学习笔记
- 2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记
- 【读书笔记:C++ primer plus 第六版 中文版】第17章 输入、输出和文件
- 《C++ primer plus》第十七章 输入、输出和文件(二):文件的输入和输出 学习笔记
- 《C++ Primer Plus(第六版)》(38)(第十七章 输入、输出和文件 笔记1)
- 《C++ Primer Plus(第六版)》(39)(第十七章 输入、输出和文件 笔记2)
- 《C++ Primer Plus(第六版)》(40)(第十七章 输入、输出和文件 复习题和答案)
- 《C++ Primer Plus(第六版)》(41)(第十七章 输入、输出和文件 编程练习和答案1)
- 《C++ Primer Plus(第六版)》(42)(第十七章 输入、输出和文件 编程练习和答案2)
- C++——输入、输出和文件
- 【C++ primer】第十七章 输入、输出和文件
- C了个++:01 - C++的输入、输出和文件
- 【C Primer Plus】第十三章 文件的输入/输出
- c primer plus 5 ch4 字符串和格式化输入/输出
- c++primer plus第十七章-输入和输出概述
- android webview 硬件加速 view渲染问题
- Docker cpu限制分析
- Codeforces Round #368 (Div. 2) (勾股数)
- Windows远程桌面连接时出错,重启还是不行的处理方法。
- meta name="viewport" content="width=device-width,initial-scale=1.0" 解释
- C++ Primer Plus 之 输入、输出和文件
- MFC Edit控件 error:“DDX_Control”: 不能将参数 3 从“int”转换为“CWnd &”
- 根据前台设计数据库--产品展示页
- V第七章 字符串
- 抓包获取百度音乐API
- Codeforces Round #336 (Div. 2)C. Chain Reaction
- Mysql常用数据类型大小及范围
- 算法之迷宫问题
- 欢迎使用CSDN-markdown编辑器