您的位置:首页 > 编程语言 > C语言/C++

C++ cout 控制输出

2014-01-06 13:43 260 查看
1. I/O的书写格式

I/0流是输入或输出的一系列字节,当程序需要在屏幕上显示输出时,可以使用插入操 作符“<<”向cout输出流中插入字符。例如:

cout<<”This is a program.\n";

当程序需要执行键盘输入时,可以使用抽取操作符 “>>”从cin输人流中抽取字符。例如:

int myAge;

cin>>myAge;

不管把什么基本数据类型的名字或值传给流,它都能懂。

例如,下面的函数输出字符串和整数:
#include     iostream.h
void main()
{
cout << "My name is Jone\n";
cout "the ID is";
cout << 2;
cout << endl;
}

上面的输出也可以在同一行中串连,下面的输出语句与上例输出同样 内容:

  cout <<"My name is Jone\n" <<”the ID is"<< 2 <<endl;

也可以分在几行,提高可读性,下列语句与上例输出同样结果:

     cout<<"My name is Jone n" //行末无分号

<<"the ID is"

<<2

<<endl;

cin可以和cout一样的方式调整行,它自动 识别变量位置和类型。例如:

int i;float f;long l;

cin >>i >>f >>l;

cin能够知道抽取的变量之类型,它将对i,f,l分别给出一个整型、浮点型和长整型数。

2. 使用控制符

流的默认格式输出有时不能满足特殊要求,如:

   double average=9.400067;

cout<<average<<endl;

  希望显示的是9.40,即保留两位小数,可是却显示了9.40007;默认显示6位有效位。 用控制符(manipulators)可以对I/O流的格式进行控制。控制符是在头文件iomanip.h中定义的对象。可以直接将控制符插入流中。常用 控制符如表2-4所列。

 表2-4 I/O流的常用控制符

[align=center]控制符[/align]
[align=center]描 述[/align]
dec

hex

oct

setfill(c)

setdivcision(n)

setw(n)

setiosflags(ios::fixed)
[align=left]setiosflags(ios::scientific)[/align]
[align=left]setiosflags(ios::left)[/align]
[align=left]setiosflags(ios::right)[/align]
[align=left]setiosflags(ios::skipws)[/align]
[align=left]setiosflags(ios::uppercase)[/align]
[align=left]setiosflags(ios::lowercase)[/align]
置基数为10

置基数为16

置基数为8

没填充字符为c

没显示小数精度为n位

设域宽为n个字符

固定的浮点显示

指数表示

左对齐

右对齐

忽略前导空白

16进制数大写输出

16 进制数小写输出
使用控制符时,要在程序的头上加头文件iomanip.h。

故C++ cout输出16进制的代码为:
code1:

int aa = 0x50;

cout<<"Msg = "<<hex<<aa<<endl;

输出:
Msg = 50

3.控制浮点数值显示

使用setdivcision(n)可控制输出流显示浮点数的数字个 数。C++默认的流输出数值有效位是6。

如果setdivcision(n)与setiosflags(ios::fixed)合用,可以控 制小数点右边的数字个数。setiosflags(ios::fixed)是用定点方式表示实数。

如果与 setiosnags(ios::scientific)合用, 可以控制指数表示法的小数位数。setiosflags(ios::scientific)是用指数方式表示实数。

例如,下面的代码分别用浮 点、定点和指数方式表示一个实数:

//*********************

//**  ch2_1.cpp **

//*********************

#include <iostream.h>

#include <iomanip.h> //要用到格式控制符

void main()

{

double amount = 22.0/7;

cout <<amount <<endl;

cout <<setdivcision(0) <<amount <<endl

<<setdivcision(1) <<amount <<endl

<<setdivcision(2) <<amount <<endl

<<setdivcision(3) <<amount <<endl

<<setdivcision(4) <<amount <<endl;

      cout <<setiosflags(ios::fixed);

cout <<setdivcision(8) <<amount <<endl;

      cout <<setiosflags(ios::scientific)

<<amount <<endl;

      cout <<setdivcision(6); //重新设置成原默认设置

}

   运行结果为:

     3.14286

3

3

3.1

3.14

3.143

3.14285714

3.14285714e+00

  该程序在32位机器上运行通过。

在用浮点表示的输出中,setdivcision(n)表示有效位数。

第1行输出数值之前没有设置有效位数,所以用流的有效位数默认设置值6:第2个输出设置了有效位数0,C++最小的有效位数为1,所以作为有效位数设置 为1来看待:第3~6行输出按设置的有效位数输出。

在用定点表示的输出中,setdivcision(n)表示小数位数。

第7行输出是与setiosflags(ios::fixed)合用。所以setdivcision(8)设置的是小数点后面的位数,而非全部数字个 数。

在用指数形式输出时,setdivcision(n)表示小数位数。

第8行输出用 setiosflags(ios::scientific)来表示指数表示的输出形式。其有效位数沿用上次的设置值8。

小数 位数截短显示时,进行4舍5入处理。

4.设置值的输出宽度

除了使用空格来强行控制输出间隔外,还可以用 setw(n)控制符。如果一个值需要比setw(n)确定的字符数更多的字符,则该值将使用它所需要的所有字符。例如:

float amount=3.14159;

cout <<setw(4) <<amount <<endl;

其运行结果为:3.14159。它并不按4位宽度,而是按实际宽度输出。

如果一个值的字符数比setw(n)确定的字符个数更少,则在数字 字符前显示空白,不同于其他控制符,setw(n)仅仅影响下一个数值输出,换句话说,使用setw设置的间隔方式并不保留其效力。例如:

  cout<<setw(8)

<<10

<<20<<endl;

运行结果为:

-------1020

运行结果中的下横线表示空 格。整数20并没有按宽度8输出。setw()的默认值为宽度0,即setw(0),意思是按输出数值的表示宽度输出, 所以20就紧挨10了。若要每个数值都有宽度8,则每个值都要设置:

   cout<<setw(8)<<10

<<setw(8) <<20 <<endl;

5.输出8进制和16进制数

3个常用的控制符是hex,oct和dec,它们分别对应16 进制、8进制和10进制数的显示。这3个控制符在iostream.h头文件中定义。例如:

     //*********************

//**  ch2_2.cpp   **

//*********************

    #include <iostream.h>

    void main()

{

int number=1001;

cout <<"Decimal:" <<dec <<number <<endl

<<"Hexadecimal:" <<hex <<number <<endl

<<"Octal:" <<oct <<number <<endl;

}

  运行结果为:

      Decimal:1001

Hexadecimal:3e9

Octal:1751

1001是一个10进制数,不能把它理解成16进制或8进制数,因为它不是以0x或0开头。但 在输出时, 流根据控制符进行过滤, 使其按一定的进制来显示。

用头文件iomanip.h中的 setiosflags(ios::uppercase)可以控制16进制数大写输出。例如,上例中增加一个头文件,对16进制数进行大写控制,即:

     #include<iostream.h>

#include<iomanip.h>

//...

    cout<<"Hexadecimal:"<<hex

<<setiosftags(ios::uppercase)

<<number<<endl;

便能得到16进制数的大写表示:Hexadecimal:3E9。

6.设置填充字符

setw可以用来确定显示的宽度。默认时,流使用空格符来保证字符间的正确间隔。用setfill控制符可以确定一个非空格的别的字符。Setfill 在头文件iomanip·h中定义。例如:

    //*********************

//**   ch2_3.cpp  **

//*********************

    #include <iostream.h>

#include <iomanip.h>

    void main()

{

cout <<setfill('*')

<<setw(2) <<21 <<endl

<<setw(3) <<21 <<endl

<<setw(4) <<21 <<endl;

      cout <<setfill(' '); // 恢复默认设置

}

运行结果为:

     21

*21

**21

7.左右对齐输出

默认时,I/O流左对齐显示的内容。使用头文件iomanip.h中的 setiosflags(ios::left)和(ios::right)标志,可以控制输出对齐。例如:

     //*********************

//** ch2_4.cpp **

//*********************

    #include <iostream.h>

#include <iomanip.h>

    void main()

{

cout <<setiosflags(ios::right)

<<setw(5) <<1

<<setw(5) <<2

<<setw(5) <<3 <<endl;

    cout <<setiosflags(ios::left)

<<setw(5) <<1

<<setw(5) <<2

<<setw(5) <<3 <<endl;

}

  运行结果为:

    -----1-----2-----3

1-----2-----3-----

8.强制显示小数点和符号

当程序输出下面的代码时:

cout<<10.0/5<<endl;

默认的I/0流会简单地显示2,而非2.0,因为除法的结果是精确的。当 需要显示小数点时,可以用iso::showpoint标志。例如:

    //*********************

//**  ch2_5.cpp   **

//*********************

    #include <iostream.h>

#include <iomanip.h>

    void main()

{

cout <<10.0/5 <<endl;

    cout <<setiosflags(ios::showpoint)

<<10.0/5 <<endl;

}

    运行结果为:

      2

2.00000

默认时,I/O流 仅在负数之前显示值的符号,根据程序的用途,有时也需要在正数之前加上正号,可以用ios::showpos标志。例如:

  //*********************

//** ch2_6.cpp **

//*********************

    #include <iostream.h>

#include <iomanip.h>

    void main()

{

cout <<10 <<" " <<-20 <<endl;

     cout <<setiosflags(ios::showpos)

<<10 <<" " <<-20 <<endl;

}

  运行结果为:

     10 -20

+10 -20

小 结

变量是程序分配给某个内存位置的名字,它可以存放信息。程序在使用变量前,必须先说明变量名和变量 类型。

不同的变量不能同名,变量名应该尽量反映出变量的用途,以增强程序的可读性。

在程序运行中,常量的值不可改变。常量也有各 种数据类型,也占有存储空间。各种数据类型的数据表示有一定的范围,越过了该范围, C++就要对该数据进行截取,使得数据不再正确。

利用 cout可以输出各种数据类型的数据,可以多种方式在屏幕上显示输出信息(包括特殊符号)。

C++兼容C的库函数,所以printf()和 scanf()也可照常使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: