输出对齐有两个方面,一是输出宽度,一是左对齐还是又对齐。

在C++里面,默认是右对齐,可以通过cout.setf(std::ios::left)调整为左对齐,而且这种调整是全局的

,一次设置,后面都有效。

但是对于输出宽度的设置(使用cout.width(int i)设置)是一次性的,只影响紧随其后的一次输出。

具体可以参看下面的代码:

#include<iostream>
int main(){
using std::cout;
cout.setf(std::ios::left);
int w = cout.width();
cout << "default field width = " << w << "\n";
cout.width(5);
cout << "N" << ":";
cout.width(8);
cout << "N * N" << "\n";
for (long i = 1; i <= 100; i *= 10){
cout.width(5);
cout << i << ':';
cout.width(8);
cout << i * i << "\n";
}
return 0;
}

我们可以把调整对齐方向的代码删除(也就是采用默认的右对齐设置),重新运行后输出如下:

可以仔细观察下,坐边的数与冒号的距离。在采用右对齐的时候,左边的数与冒号是紧邻的,而采用左对齐的时候,左边的数在输出5个字符宽度后,才输出冒号(再次强调,宽度设置只影响一次输出。也就是只影响N的输出,没有影响冒号的输出。)

在这方面C语言的就显得简单多了,printf("%5d"),输出占用5个字符宽度,且右对齐,printf("%-5d")输出占用5个字符宽度,且左对齐。都是什么时候用就什么时候设置。

还有一个问题就是,当实际的数据需要的宽度超出你设置的宽度的时候怎么办?

C++的选择是,保证将数据显示完整。

比如上面程序中的第8行:

cout << "N" << ":";
我们修改成
cout << "NNNNN" << ":";
发现输出如下:

此时,数据恰好5个字符宽,依旧可以对齐,但是我们再加一个N,如下:
cout << "NNNNNN" << ":";

有没有发现已经对不齐了。所以C++中式优先保证把数据显示完整。

C语言使用printf其实也是一样的,优先保证把数据显示完整。

最新文章

  1. mybatis入门基础(八)-----查询缓存
  2. Strict Standards: Only variables should be passed by reference
  3. java 15-2 Collection的高级功能测试
  4. linux下为php安装APC扩展
  5. UVa 10635 (LIS+二分) Prince and Princess
  6. Document Set 【一】
  7. IOS开发----委托机制
  8. iOS中使用图片作为颜色的背景图
  9. Android studio checkstyle 使用
  10. JAVA技术交流群
  11. JavaScript 比量 Chrome 核心 360 浏览器(关闭和技巧)
  12. maven-assembly-plugin插件的使用方法
  13. IntelliJ IDEA开发Scala代码,与java集成,maven打包编译
  14. 二、springboot使用jpa
  15. 五分钟让你读懂UML常见类图
  16. Oracle索引失效原因及解决方法
  17. 设计模式 笔记 模版方法模式 Template Method
  18. (原)torch中threads的addjob函数使用方法
  19. IntelliJ IDEA SVN
  20. 五个你必须知道的javascript和web debug技术

热门文章

  1. Unix系统编程(三)通用的I/O
  2. PHP——smarty模板(第一天)
  3. linux—jdk 安装步骤
  4. 转!sqlite3.OperationalError) no such table- users [SQL- &#39;SELECT users.id AS users_id, users.email AS u
  5. Mathematica之基本操作
  6. 上下居中css
  7. Map Labeler (poj 2296 二分+2-SAT)
  8. Innodb间隙锁,细节讲解(转)
  9. Linux查看网络和IO性能问题
  10. iOS开发,利用文件流,算大文件的MD5值(程序不会导致内存崩溃)