I/0流是输入或输出的一系列字节,当程序需要在屏幕上显示输出时,可以使用插入操 作符“<<”向cout输出流中插入字符。例如:
当程序需要执行键盘输入时,可以使用抽取操作符 “>>”从cin输人流中抽取字符。例如:
不管把什么基本数据类型的名字或值传给流,它都能懂。
例如,下面的函数输出字符串和整数:
流的默认格式输出有时不能满足特殊要求,如:
希望显示的是9.40,即保留两位小数,可是却显示了9.40007;默认显示6位有效位。 用控制符(manipulators)可以对I/O流的格式进行控制。控制符是在头文件iomanip.h中定义的对象。可以直接将控制符插入流中。常用 控制符如表2-4所列。
表2-4 I/O流的常用控制符
使用控制符时,要在程序的头上加头文件iomanip.h。
该程序在32位机器上运行通过。
在用浮点表示的输出中,setdivcision(n)表示有效位数。
第1行输出数值之前没有设置有效位数,所以用流的有效位数默认设置值6:第2个输出设置了有效位数0,C++最小的有效位数为1,所以作为有效位数设置 为1来看待:第3~6行输出按设置的有效位数输出。
在用定点表示的输出中,setdivcision(n)表示小数位数。
在用指数形式输出时,setdivcision(n)表示小数位数。
第8行输出用 setiosflags(ios::scientific)来表示指数表示的输出形式。其有效位数沿用上次的设置值8。
小数 位数截短显示时,进行4舍5入处理。
变量是程序分配给某个内存位置的名字,它可以存放信息。程序在使用变量前,必须先说明变量名和变量 类型。
不同的变量不能同名,变量名应该尽量反映出变量的用途,以增强程序的可读性。
在程序运行中,常量的值不可改变。常量也有各 种数据类型,也占有存储空间。各种数据类型的数据表示有一定的范围,越过了该范围, C++就要对该数据进行截取,使得数据不再正确。
利用 cout可以输出各种数据类型的数据,可以多种方式在屏幕上显示输出信息(包括特殊符号)。
如果程序中频繁出现 cout ,这样的操作极为不便,所以可以使用下面两种方法来解决。
方法一 :使用 std 命名空间
这样,后面程序中可以直接使用 cout ,而且std中的其他名字也可以直接使用,如 cin 、 endl 等。
方法二 :使用 std 命名空间中的 cout
这样,后面程序中只可以直接使用 cout ,而 std 中的其他名字不可以可以直接使用。
i++ 和 ++i 是有着不同的含义,和 cout 组合使用也会得到不同的结果,下面给出一段代码:
这段代码的结果是多少呢?
我们不妨先理解一下 cout 输出控制台的过程。看下面这幅图:
根据表达式来看, endl 会作为一个可以供 cout 接收的对象往前传,而 ++i 和 endl 结合起来作为一个可以供 cout 接收的对象往前传,依次递推下去。物理实现上需要一个栈来保存可以供
cout 接收的对象,然后从右向左放到这个栈里,然后依次弹出输出在屏幕上。其中, i 和 ++i 会在栈里面保存 i 的引用,而 i++ 会在栈里面保存数字,过程如下:
第一步:将 endl 压入栈中, i 值不变;
第二步:将 i 的引用压入栈中, i 的值加 1 变成 2(因为是 ++i );
第三步:将 2 压入栈中, i 的值加 1 变成 3(因为是 i++ );
第四步:将 i 的引用压入栈中, i 的值不变(因为是 i );
第五步:将 3 压入栈中, i 的值加 1 变成 4(因为是 i++ );
第六步:将 i 的引用压入栈中, i 的值加 1 变成 5(因为是 ++i );
第七步:将栈里的数据依次弹出,即可得到 53525 。(因为i的值是 5 ,所以所有 i 的引用都是 5 )
有时候,我们需要以不同的进制来输出数字,而默认输出是十进制,其他进制输出方法如下:
其中,oct 是八进制输出, dec 是十进制(效果和默认一样), hex 是十六进制输出(字母默认是小写字母)。这两个也包含在 std 中,即其全称分别是 std::oct 、
前提:包含库 < iomanip > ,这个库包含了对输入输出的控制。
可以看出,C++默认浮点数输出有效位数是 6 位(若前面整数位数大于 6 位,使用科学计数法输出),而通过以下几种方式可以更改输出精度:
(若前面整数位数大于 n 位,使用科学计数法输出)
所以,和 setprecision(n) 结合使用即可设置浮点数小数点后面数字的输出精度,位数不足的补零
以上均采用 “四舍五入” 的方法控制精度,三个控制符均包含在 std 命名空间中。
显示默认 6 位有效位数,两个控制符均包含在库 < iomanip > 中,std 命名空间中。
输出结果默认显示右对齐。三个控制符均包含在库 < iomanip > 中,std 命名空间中。
< iomanip > 库封装了很多对输入输出流的操作,常见用法总结如下:
|
|
设置字符填充,ch可以是字符常量或字符变量
|
设置输出有效位数为n位
|
设置字符宽度为n位,只对后一个有影响
|
|
实现对小数点后的数字的控制
|
|
|
|
|
|
|