控制符是在头文件iomanip.h中定义的对象。使用前必须把iomanip.h包含进来

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流的常用控制符

控制符
描 述
dec
hex
oct
setfill(c)
setdivcision(n)
setw(n)
setiosflags(ios::fixed) setiosflags(ios::scientific) setiosflags(ios::left) setiosflags(ios::right) setiosflags(ios::skipws) setiosflags(ios::uppercase) setiosflags(ios::lowercase)
置基数为10
置基数为16
置基数为8
没填充字符为c
没显示小数精度为n位
设域宽为n个字符
固定的浮点显示
指数表示
左对齐
右对齐
忽略前导空白
16进制数大写输出
16进制数小写输出

使用控制符时,要在程序的头上加头文件iomanip.h。

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()也可照常使用。

c++ Cout 输出格式的更多相关文章

  1. [转] C/C++中printf和C++中cout的输出格式

    原文地址 一. Printf 输出格式 C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型,其中方括号[]中的项为可选项.各项的意义介绍如下:1.类型类型字符用以表示输出数 ...

  2. cout设置输出数据不显示科学计数法

    [解决方案] 1.在头文件包含—#include<iomanip>——定义IO流输出输入格式控制相关函数. 2.利用cout输出格式为—cout << fixed <&l ...

  3. C++中的cout.setf(ios::fixed)是什么意思?

    问题描述:在阅读一段代码时,发现代码的最后一部分出现 ... cout.setf(ios::fixed); cout.setf(ios::showpoint); ... 解决: cout.setf() ...

  4. C++<iomanip>控制符

    C++<iomanip>控制符 c++ cout 输出格式 在c++程序里面经常见到下面的头文件 #include <iomanip> io代表输入输出,manip是manip ...

  5. C/C++ 数据精确度的设置

    #include<iostream>#include<iomanip> //此库为代码最后一行快捷设置数据格式需要用的的库 #include<math.h>usin ...

  6. c++ --> cin和cout输入输出格式

    cin和cout输入输出格式 Cout 输出 1>. bool型输出 cout << true <<" or " << false < ...

  7. cout的输出格式初探

    在C++中,cout代表的是标准输出设备,即显示器,相对于C语言中所使用的printf函数,cout显得更为灵活.下面以30.300和1024三个数为例子,简单说明cout输出时所选格式的输出.cou ...

  8. C++ cout格式化输出(输出格式)完全攻略

    使用流操作算子 它们都是在头文件 iomanip 中定义的:要使用这些流操纵算子,必须包含该头文件. 表1:C++ 流操纵算子 流操纵算子 作  用 *dec 以十进制形式输出整数 hex 以十六进制 ...

  9. C++中关于cout相关的输出格式(操作流算子)

    这边需要注意的是如果使用到setpercision,一定要引入iomanip头文件,否则编译会出错 注意以下的操作流算子都是在头文件iomanip中定义的,强烈建议使用的时候引入改头文件否则可能会出现 ...

随机推荐

  1. Ext.Ajax.request同步请求

    导读: ajax分为2种,一种是同步,一种是异步同步:代码执行完了之后才执行后面的代码 异步:代码刚执行,后面的代码就马上接着执行了,不管前面的代码是否执行完异步的情况下,要获得返回信息,就需要在异步 ...

  2. [cocos2d] 利用texture atlases生成动画

    texturepacker可以方便地制作纹理贴图集(Texture Atlases),而且可以免费试用.(可在官网申请免费liscence) //利用软件将5帧png贴图生成1张大的png贴图和pli ...

  3. Nginx windows下搭建过程

    内容列表: 简要介绍 下载安装 配置测试 一.简要介绍 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP ...

  4. 数据结构(启发式合并):HNOI 2009 梦幻布丁

    Description N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. Input 第 ...

  5. 最棒的Visual Studio扩展

    isual Studio是微软公司推出的开发环境,Visual Studio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务.智能设备应用程序和Offic ...

  6. CHS与LBA之间转换程序

    原理及介绍来自维基百科 http://zh.wikipedia.org/wiki/%E9%82%8F%E8%BC%AF%E5%8D%80%E5%A1%8A%E4%BD%8D%E5%9D%80 个人用的 ...

  7. Live555 Streaming from a live source

    https://www.mail-archive.com/live-devel@lists.live555.com/msg05506.html-----ask--------------------- ...

  8. grunt个人理解

    最近在学习grunt的内容,也希望能将grunt使用在新的项目中,本文是对grunt的相关概念的个人理解,仅供与道友们交流和学习,如有疑义,欢迎道友们指点. 首先,grunt是基于nodejs的,那就 ...

  9. BZOJ 1835: [ZJOI2010]base 基站选址 [序列DP 线段树]

    1835: [ZJOI2010]base 基站选址 题目描述 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立 ...

  10. xml学习篇(一)

    转自:http://www.cnblogs.com/Jimmy009/archive/2012/06/18/2553722.html XML简介: 好了可以开始正式的学习了,在以前看一本计算机书籍,一 ...