16 六月 2010

C++格式化输出

一直以来写程序用的都是C和Cpp的混合物,只因C的IO会比C++的快一些,原因是C++的刷新缓冲区时耗费了时间。所以对C++的格式化输出都不是很了解,今天研究了下,主要参考书目是C++ Primer (第四版),附录里介绍的很详细!今记下来权作学习笔记了。

  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. int main()
  5. {
  6.    double pi=3.1415926535897;
  7.    cout<<pi<<endl;
  8.   
  9.    cout.setf(ios::fixed);   //称之为魔法配方
  10.    cout.setf(ios::showpoint);
  11.  
  12.    //控制小数点后的位数,有效期到新的设置
  13.    cout.precision(6);   
  14.    cout<<"输出带有位小数的pi"<<endl;
  15.    cout<<pi<< endl;
  16.  
  17.    //{……}语句块中若有输出,始终以上一次设置的输出小数位为准
  18.  
  19.    cout.precision(3); //若需更改小数位,直接在输出前重设
  20.    cout<<pi<< endl;
  21.  
  22.    //取消魔法配方,unsetf
  23.    cout.unsetf(ios::fixed);
  24.    cout<<pi<<endl;
  25.  
  26.    //setw()输出宽度!使用setw()要添加"<iomanip>"头文件
  27.    cout<<"输出左(右)对齐,并设定输出宽度"<<endl;
  28.    for(int i=1;i!=101;i++)    
  29.    {
  30.       //设置为左对齐,输出宽度为5
  31.       cout<<setiosflags(ios::left)<<setw(5)<<i;
  32.       if(i%10==0)
  33.          cout<<endl;
  34.    }
  35.  
  36.    for(int i=1;i!=101;i++)    
  37.    {
  38.       //设置为右对齐,输出宽度为
  39.       cout<<setiosflags(ios::right)<<setw(5)<<i;
  40.       if(i%10==0)
  41.          cout<<endl;
  42.    }
  43.  
  44.    //setfill(ch)使用字符进行填充
  45.    cout<<"输出数据右对齐,并用*填充"<<endl;
  46.    for(int i=1;i!=101;i++)    
  47.    {
  48.       //设置为右对齐,输出宽度为5,并用*填充
  49.       cout<<setiosflags(ios::right)<<setw(5)
  50.           <<setfill('*')<<i<<' ';
  51.       if(i%10==0)
  52.          cout<<endl;
  53.    }
  54.  
  55.    //修改输出整形变量进制,octhexdec
  56.    //分别为八进制、十六进制、十进制
  57.    int d=10000,e=5555;
  58.    cout<<"以不同进制输出数据分别为八、十六、十进制"<<endl;
  59.    cout<<"d (oct) = "<<oct<<d<<endl<<e<<endl
  60.       <<"d (hex) = "<<hex<<d<<endl<<e<<endl
  61.       <<"d (dec) = "<<dec<<d<<endl<<e<<endl;
  62.  
  63.    //使用showbase输出基数
  64.    cout<<"输出数据基数"<<endl;
  65.    cout<<showbase;//此句之后全部都会输出基数
  66.    cout<<"d (oct) = "<<oct<<d<<endl<<e<<endl
  67.        <<"d (hex) = "<<hex<<d<<endl<<e<<endl
  68.        <<"d (dec) = "<<dec<<d<<endl<<e<<endl;
  69.  
  70.    cout<<noshowbase;//停止输出基数:noshowbase
  71.    cout<<"使用noshowbase停止输出基数"<<endl;
  72.    cout<<"d (oct) = "<<oct<<d<<endl<<e<<endl
  73.        <<"d (hex) = "<<hex<<d<<endl<<e<<endl
  74.        <<"d (dec) = "<<dec<<d<<endl<<e<<endl;
  75.    system("pause");
  76.    return 0 ;
  77. }

 

运行结果:

3.14159
输出带有位小数的pi
3.141593
3.142
3.14
输出左(右)对齐,并设定输出宽度
1    2    3    4    5    6    7    8    9    10
11   12   13   14   15   16   17   18   19   20
21   22   23   24   25   26   27   28   29   30
31   32   33   34   35   36   37   38   39   40
41   42   43   44   45   46   47   48   49   50
51   52   53   54   55   56   57   58   59   60
61   62   63   64   65   66   67   68   69   70
71   72   73   74   75   76   77   78   79   80
81   82   83   84   85   86   87   88   89   90
91   92   93   94   95   96   97   98   99   100
    1    2    3    4    5    6    7    8    9   10
   11   12   13   14   15   16   17   18   19   20
   21   22   23   24   25   26   27   28   29   30
   31   32   33   34   35   36   37   38   39   40
   41   42   43   44   45   46   47   48   49   50
   51   52   53   54   55   56   57   58   59   60
   61   62   63   64   65   66   67   68   69   70
   71   72   73   74   75   76   77   78   79   80
   81   82   83   84   85   86   87   88   89   90
   91   92   93   94   95   96   97   98   99  100
输出数据右对齐,并用*填充
****1 ****2 ****3 ****4 ****5 ****6 ****7 ****8 ****9 ***10
***11 ***12 ***13 ***14 ***15 ***16 ***17 ***18 ***19 ***20
***21 ***22 ***23 ***24 ***25 ***26 ***27 ***28 ***29 ***30
***31 ***32 ***33 ***34 ***35 ***36 ***37 ***38 ***39 ***40
***41 ***42 ***43 ***44 ***45 ***46 ***47 ***48 ***49 ***50
***51 ***52 ***53 ***54 ***55 ***56 ***57 ***58 ***59 ***60
***61 ***62 ***63 ***64 ***65 ***66 ***67 ***68 ***69 ***70
***71 ***72 ***73 ***74 ***75 ***76 ***77 ***78 ***79 ***80
***81 ***82 ***83 ***84 ***85 ***86 ***87 ***88 ***89 ***90
***91 ***92 ***93 ***94 ***95 ***96 ***97 ***98 ***99 **100
以不同进制输出数据分别为八、十六、十进制
d (oct) = 23420
12663
d (hex) = 2710
15b3
d (dec) = 10000
5555
输出数据基数
d (oct) = 023420
012663
d (hex) = 0x2710
0x15b3
d (dec) = 10000
5555
使用noshowbase停止输出基数
d (oct) = 23420
12663
d (hex) = 2710
15b3
d (dec) = 10000
5555
请按任意键继续. . .

一直没有找到在Live Writer 的Coder插件,现在使用Word来写,感觉还算不错。

0 评论:

发表评论