首页 > 编程 > C++ > 正文

C++域宽设置—让输出更规范

2020-05-23 14:28:05
字体:
来源:转载
供稿:网友
看了程序5.3.1的运行结果,你可能会觉得输出的数字不太整齐。第一行的一位数都挤在了一起,而第二行开始的两位数都是整整齐齐的。那么,我们有什么办法让他们排排整齐么?大家自然就先想到空格了。不过如果为了个这么简单的功能,还要去编写一段判断一下这个数是几位的,要加几个空格之类代码就有点麻烦了。其实C++早已经为我们准备好了更方便的方法。这种方法就是设置域宽。

所谓域宽,就是输出的内容(数值或字符等等)需要占据多少个字符的位置,如果位置有空余则会自动补足。比如我们要设置域宽为2,那么当输出一位数1的时候输出的就是“ 1”,即在1前面加了一个空格。空格和数字1正好一共占用了两个字符的位置。

那有些时候我们不想在1前面补上空格,而是希望1前面补上0可不可以?当然也是可以的。我们可以设置填充字符,如果我们把0设置为填充字符,那么1前面就变成0了。

设置域宽的具体语法格式为:
    cout <<setw(int n) <<被设置的输出内容1 [<<setw(int m) <<被设置的输出内容2 …];
设置填充字符的具体语法格式为:
    cout <<setfill(char n) <<被设置的输出内容 [<<setfill(char m) <<被设置的输出内容12 …];


我们在设置域宽和填充字符的时候要注意几点:
  1. 设置域宽的时候应该填入整数,设置填充字符的时候应该填入字符。
  2. 我们可以对一个要输出的内容同时设置域宽和填充字符,但是设置好的属性仅对下一个输出的内容有效,对以后输出要再次设置。即cout <<setw(2) <<a <<b;语句中域宽设置仅对a有效,对b无效。
  3. setw和setfill被称为输出控制符,使用时需要在程序开头写上#include "iomanip.h",否则无法使用。

下面我们来看一段有关输出图形的循环嵌套程序:(程序5.3.2)
#include "iostream.h"
#include "iomanip.h"
int main()
{
   int a,b;
   cout <<"请输入长方形的长和宽:" <<endl;
   cin >>a >>b;
   for (int i=1;i<=b;i++)//控制长方形的宽度
   {
      for (int j=1;j<=a;j++)//控制长方形的长度
      {
         cout <<setw(2) <<'*';
      }
      cout <<endl;
   }
   return 0;
}

运行结果:
请输入长方形的长和宽:
5 3
* * * * *
* * * * *
* * * * * 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表