文档章节

C++Primer Plus --- 输入,输出和文件

積木leayn
 積木leayn
发布于 2013/10/17 10:59
字数 1111
阅读 45
收藏 0

1. C++ 程序通常在用户按下回车键时刷新输入缓冲区。

    C++ I/O定义了一些类模板,以支持char 和 what_t 数据。使用typedef工具,C++使得这些模板char具体化到能模仿传统的非模板I/O实现。下面是相关类:

  • streambuf 类为缓冲区提供了内存,并提供了用于填充缓冲区,访问缓冲区内容,刷新缓冲区和管理缓冲区内存的类方法; 
  • ios_base 类表示流的一般特征,如是否可读取,是二进制流还是文本流等;
  • ostream,istream都是从ios类派生来的,提供了输出和输入方法;
  • iostream类是基于istream和ostream类的,因此继承了输入和输出方法。

要使用这些工具,必须使用适当的类对象。例如cin cout。

2. 重载的<<操作符

   << 默认含义是按位左移操作符,但是ostream类重新定义了<<操作符,方法是将其重载为输出。

在这种情况下,<<叫做插入操作符,而不是左移操作符。插入操作符被重载,使之能够识别C++中多有基本类型。ostream都提供了operator<<() 函数的定义。

    例如: ostream & perator<<(int) 表示函数接受一个int参数。

3. write()显示整个字符串,模板原型为:

   basic_ostream<charT, traits>& write(const char_type* s, streamsize n);

   cout.wirite() 调用cout对象,因为write方法返回一个指向调用它的对象的引用,这里调用它的对象是cout.

write方法并不会在遇到空字符时自动停止打印字符,而只是打印指定数目的字符,即使超过了字符串的边界!

    writ()方法也可以用于数值数据,可以将地址强制转换为char*,然后传递给它。

    long val = 4545121212;

    cout.write((char*) &val, sizeof(long)); 

4. 刷新缓冲区

   缓冲区被填满,程序将flush刷新缓冲区,把内容发出去,并清空缓冲区,以存储新的数据。  

   通常缓冲区为512字节或其整数倍。

   但是,在屏幕输出时,不用等到缓冲区填满,例如将换行符发送到缓冲区,将刷新缓冲区;另外输入即将发生缓冲区刷新。

   实际上,控制符也是函数。 例,可以直接调用flush()来刷新cout缓冲区; flush(cout);

5. c++ 将十六进制和八进制都视为无符号的。

6. 使用cin进行输入

   cin对象将标准输入表示为字节流。输入流的方法,跳过空白(space, enter, tab),直到遇到非空白字符。即使对于单字符模式,>>操作符将读取一个指定类型的数据。也就是说,它读取从非空白字符开始,到与目标类型不匹配的第一个字符之间的全部内容。

7. 流状态

   设置状态

   clear() 在输入不匹配或到达文件尾时,需要使用不带参数的clear()重新打开输入。

   setstate() 为了输入和输出函数提供一种修改状态的途径。例如:setstate(eofbit)

8. get(char&) 和 get(void) 提供不跳过空白的单字符输入功能。

   cin.get(ch)指向istream对象的引用,到达文件末尾时函数返回值,转换为false

   cin.get(void)字符编码 int, 到达文件末尾时函数的返回值是EOF

9. 字符串输入:getline() get()  ignore()

   get()将换行符留在输入流中,这样接下来的输入操作首先将看到换行符;

   getline()抽取并丢弃输入流中的换行符。

10. 文件输入和输出

  字处理程序创建文件;数据库程序创建和搜索信息文件;编译器读取源代码文件并生成可执行文件。文件本身是存储在某种设备上的一系列字节。

11. 随机存取

   随机存取指的是直接移动(不是依次移动)到文件的任何位置。随机存取通常被用于数据库文件,程序维护一个独立的索引文件,该文件指出数据在主数据文件中的位置。

12. cin.get(char)成员函数调用通过返回转换为false的bool值来指出已达到EOF, 而cin.get()成员函数调用则通过返回EOF值来指出已达到EOF,EOF在文件iostream中定义的。

© 著作权归作者所有

積木leayn
粉丝 1
博文 73
码字总数 39453
作品 0
西安
私信 提问
C++primer标准库(2)

作为大四应届生o( ̄︶ ̄)o 最近为了后续的面试工作地点看C++primer再次深入学习C++写里一点笔记: 如下: 1. io库 • **istream(输入流)类提供输入操作。 • ostream(输出流)类提供输出操作。 ...

微小的鱼233
2018/03/02
0
0
再探C++Primer (1) 关于编译及IO流

之前在看primer的时候,第一章的内容一般都会跳过去,今天打算从头再看一次的时候,反而注意到了第一章的东西,很简单的东西,也学到了一些之前没有关注的内容。 在之前都是使用现成的IDE来编...

大鲸鱼锅锅
2016/07/02
16
0
C++ primer第二次阅读学习笔记(第1、2章)

C++ primer第二次阅读学习笔记(第1、2章) 一年前开始了C++primer的第一遍阅读,一年之后重新拾起C++primer。原因有二,一:第一遍阅读时刚开始接触C++,对C++认识有限,学习C++primer不可能...

长平狐
2012/10/08
107
0
stl的一个问题,很简单,菜鸟请大侠指教

看c++primer,添加元素使迭代器失效我写了一段代码如下:

永远对你好
2012/03/12
1K
12
大学一定要学c++么

我现在学过的语言有c java go js php,但我不会 c++,买了本c++primer,看了两页实在头疼,真心求教,一定要学c++么

五杀联盟
2012/09/03
1K
35

没有更多内容

加载失败,请刷新页面

加载更多

矩阵中的路径

判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向上下左右移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路...

Garphy
7分钟前
2
0
Hibernate 5 Maven 仓库的 Artifacts

Hibernate artifacts 官方发布的仓库在 JBoss Maven repository 中。Hibernate 发布的 artifacts 也会同时同步到 Maven Central 仓库中,这是一个自动同步进程(可能会有一些延迟)。 Hibern...

honeymoose
55分钟前
4
0
如何学习uni-app?

uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架。 开发者通过编写 Vue.js 代码,uni-app 将其编译到iOS、Android、微信小程序、H5等多个平台,保证其正确运行并达到优秀体验。 <templ...

达叔小生
59分钟前
5
0
OSChina 周一乱弹 —— 后来马云就一心想挣钱了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑:《空帆船》- 朴树 《空帆船》- 朴树 手机党少年们想听歌,请使劲儿戳(这里) @webw :第二次被锁在电梯里了 上次你忘带电梯卡, ...

小小编辑
今天
775
13
关于does not give a valid preprocessing token

#define VFUNC(self) ((##self##)->_vptr) 这样在gcc下会编译失败, VC不会 报pasting ) does not give a valid preprocessing token 据说是因为版本问题 解法:去掉## define VFUNC(self) (......

shzwork
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部