FPGA之道(18)FPGA设计的编译过程(FPGA编译步骤)
533
2022-05-28
C++ I/O 进阶
概述
I/O 类库
I/O 中的重载
流对象
标准输入流
cin 流对象
案例
get 函数
getline 函数
eof 函数
cout 流对象
cerr 流对象
clog 流对象
概述
C++ 的输入 (input stream) 和输出 (output stream)是由若干字节组成的字节序列, 使得数据按顺序从一个对象传送到另一对象. 流 (stream) 表示量信息从源到目的端的流动.
C++ 的输入输出包括:
标准 I/O: 对系统指定的标准设备的输入
文件 I/O: 对磁盘文件的输入和输出
串 I/O: 对内存中指定的空间进行的输入和输出
I/O 类库
I/O stream 类库:
头文件是程序与类库的接口, iostream 类库的接口分别由不同的文件来实现.
常用的头文件:
iostream: 包含对 I/O 进行操作的基本信息
fstream: 用于用户管理的文件的 I/O 操作
strstream: 用于字符串流的 I/O 操作
stdiostream: 用于混合使用 C 和 C++ 的 I/O 机制
iomanip: 使用格式化 I/O 时的操作
I/O 中的重载
在之前的文章中我们使用<<和>>来实现控制台的输出和输入.
<<和>>被重载来用于标准类型数据的输出和输入:
<<和>>本来是 C++ 中的左位移运算符和右位移运算符
在 iostream 头文件中<<和>>被重载了
在使用<<和>>的时候, 我们必须#include
在 input stream 和 output stream 类中对位移运算符<<和>>进行重载的成员函数, 包括:
ostream operator << (int );
ostream operator << (float );
ostream operator << (char );
ostream operator << (char *);
注: 想将<<和>>用于自己声明的类型数据必须对<<和>>进行重载.
流对象
I/O stream 头文件还定义了 4 种流对象:
cin: 从标准输入设备输入到内存的数据流对象, 称- 为 cin 流或标准输入流
cout: 从内存输出到控制台的数据流对象, 称为 cout 流或标准输出流
cerr 和 clog: 向控制台输出错误信息
例如:
当我们从键盘输入 “World”, cin 会把字符串存入内存, 当我们调用 cout, 内存中的 “World” 就被输出到控制台上.
标准输入流
标准输出流, 是流向标准输出设备的数据. ostream 类定义了 3 个输出流对象: cout, cerr, clog.
cin 流对象
cin 是 istream 类的对象, 从标准输入设备获取数据. 程序中的变量通过流提取符>>从 cin 流中提取数据:
流提取符>>从流中提取数据时, 通常跳过流中的空格, tab 键, 换行符等空白字符
只有在输入完数据再按回车键后, 该行数据才被送入键盘缓冲区, 形成输入流. 提取运算符>>才能从中提取数据
程序将从键盘缓冲区中连续的获得数据
当遇到无效字符或文件结束符^Z时, cin 无法正常提取数据, 处于出错状态, 返回 0 值 (false)
案例
输入个数不确定的成绩:
#include
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
输出结果:
enter your grade: 90 90 Good! enter your grade: 12 12 fail enter your grade: ^Z The end.
1
2
3
4
5
6
7
8
9
get 函数
不带参数的 get 函数:
cin.get()
1
从输入流中提取一个字符, 返回读入的字符
遇到输入流中的文件结束符, 则返回 EOF (End Of File)
有一个参数的 get 函数:
cin.get(c)
1
从输入流中读取一个字符, 赋值给字符变量 c
读取成功返回真, 失败或遇到文件结束符返回 0 (false)
有 3 个参数的 get 函数:
cin.get(字符数组或指针, n, 终止字符)
1
从输入流中读取 n-1 个字符, 赋值给指定的字符数组
若在读取 n-1 个字符之前遇到指定的终止字符, 则提前结束读取
读取成功函数返回真, 失败返回 0 (false)
getline 函数
getline 函数的作用是从输入流中读取一行字符. 例如:
istream &getline(char *buffer, streamsize num ); istream &getline(char *buffer, streamsize num, char delim );
1
2
getline 函数用于输入流, 读取字符到 buffer 中, 直到:
num-1 个字符已经读入
碰到一个换行标志
碰到一个 EOF
读到字符 delim
注: getline 函数遇到空白字符不结束.
eof 函数
eof (End Of File) 表示文件结束. 从输入流读取数据如果达到文件末尾或遇到文件结束符时, eof 函数的值为非零值 (true), 否则为 0 (false)
cout 流对象
cout 是 console input 的缩写, 意为在控制台的输出:
cout 不是 C++ 预定义的关键字, 它是 ostream 流类的对象, 在 iostream 中定义
“cout <<” 输出基本类型的数据时, 可以不必考虑数据是什么类型,系统会判断数据的类型, 并根据其类型选择调用与之匹配的运算符重载函数
cout 流在内存中对应开辟了一个缓冲区, 用来存放流中的数据, 当向 cout 流插入一个 endl 时, 立即输出流中所有数据, 然后插入一个换行符, 并刷新流 (清空缓冲区)
cout.flush(); 输出流中所有数据, 刷新缓冲区
cerr 流对象
cerr 流对象是标准错误流, 被指定为与显示器关联. cerr 的作用是想标准组错误设备 (standard error device) 输出有关出错信息.
cerr 和 cout 的区别:
cout 流通常是传送到显示器输出, 但也可以被重新定向输出到磁盘文件
cerr 流中的信息只能在显示器输出
cerr 的用途:
当调试程序时, 往往不希望程序运行时的出错信息被送到其他文件, 而要求在显示器上及时输出, 这是应该用 cerr
cerr 流中的信息是用户根据需要指定的
案例 (解一元二次方程):
#include
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
输出结果:
clog 流对象
colg 流对象也是标准错误流, 它是 console log 的缩写. clog 的作用和 cerr 相同, 都是在终端显示器上显示出错误信息.
clog 和 cerr 的区别:
cerr 是不经过缓冲区, 直接向显示器上输出有关信息
clog 中的信息存放在缓冲区, 缓冲区满后或遇到 endl 时向显示器输出
C++ 单片机
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。