C/C++中的输出对齐设置
输出对齐有两个方面,一是输出宽度,一是左对齐还是又对齐。
在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其实也是一样的,优先保证把数据显示完整。
C/C++中的输出对齐设置的更多相关文章
- Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数
Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4 为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1 ...
- C/C++中的内存对齐问题和pragma pack命令详解
这个内存对齐问题,居然影响到了sizeof(struct)的结果值.突然想到了之前写的一个API库里,有个API是向后台服务程序发送socket请求.其中的socket数据包是一个结构体.在发送soc ...
- C++中的字节对齐分析
struct A { int a; char b; short c; }; struct B { char a; int b; short c; }; #pragma pack(2) struct C ...
- 【C/C++开发】内存对齐(内存中的数据对齐)、大端模式及小端模式
数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍.DWORD数据的内存起始地址能被4除尽,WORD数据的内存起始地址能被2除尽.X86 CPU能直接访问对齐的数据,当它试图访问一个未对齐的数据 ...
- MVC3中如何输出富文本
MVC3中如何输出富文本 在网站的文本输出中,经常会将DB里的文本输出到页面上. 一般来说是直接利用MVC3中的ViewBag将文本带到前台并表示, 或是是直接以<%:model.data%&g ...
- iOS中UITableView的一些设置
不可滑动: ? 1 tableView.userInteractionEnabled = NO; 也可以在storyboard中的userInteractionEnable属性设置 显示导向箭头: ? ...
- 【matlab】将matlab中数据输出保存为txt或dat格式
将matlab中数据输出保存为txt或dat格式 总结网上各大论坛,主要有三种方法. 第一种方法:save(最简单基本的) 具体的命令是:用save *.txt -ascii x x为变量 *.txt ...
- unity中Debug输出控制
1 需求: (1)选择在界面.console中输出,并且能够设置保存到文档 (2)控制debug是否输出,可以在debug模式下输出,release模式下不输出 2 参考: 谢谢雨松同学的博客:htt ...
- PHP中刷新输出缓冲
http://www.cnblogs.com/mutuan/archive/2012/03/18/2404957.html PHP中刷新输出缓冲buffer是一个内存地址空间,Linux系统默认大小一 ...
随机推荐
- 猫猫学iOS 之微博项目实战(5)微博自己定义搜索框searchBar
猫猫分享.必须精品 原创文章.欢迎转载. 转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:效果 用UITextField简单定义一个搜索框 二:调用 ...
- 提高.net程序性能和稳定性-CLR Profile
CLR Profile能够看到应用程序的内存堆栈情况并且能够查询垃圾回收机制的行为.利用CLR Profile可以确定你的代码哪儿分配了太多内存,从而导致垃圾回收机制的执行,哪些代码长时间的占有内存. ...
- python+fastcgi+flup获取请求的数据和环境变量
关于nginx+python+fastcgi+flup搭建fastcgi环境没问题了,可是如何处理POST/GET的请求数据呢,这个问题着实纠结了没久,通过尝试和阅读flup的源代码,终于明白了.先上 ...
- c++ 单例模式 对全局变量的替代
前段时间要实习一个充值接口,创建了一个类(就叫类A好了),这个类A要和另外3个类进行交互,3个类对类A修改的数据是对其他类可见的.这种情况我想到了3个方法: 1.static 静态成员,静态成员为该类 ...
- Python_ip代理
#encoding=utf8import urllibimport urllib2import sys sys.path.append('D:/python/beautifulsoup')sys.pa ...
- hdu1027(n个数的按字典序排列的第m个序列)
题目信息:给出n.m,求n个数的按字典序排列的第m个序列 http://acm.hdu.edu.cn/showproblem.php? pid=1027 AC代码: /** *全排列的个数(次序) ...
- html input size maxlength
最近做项目用到input的size和maxlength属性,以前只顾用没有用心去看看这2个标签的区别,今天周末baidu了一下,有所理解.特记录于此! <p>Name: <inp ...
- Java逍遥游记读书笔记<二>
Abstract抽象类 1.抽象类不能被实例化 2.抽象方法没有方法体 如: public abstract class Weapen { public abstract void attack(); ...
- 将MathType公式粘贴到文档中的步骤
MathType这款数学公式编辑器,常常是辅助于各种文档使用的.由于其编辑的公式与数学符号等都符号国际期刊的出版标准,并且上手容易,根本就不需要一个学习的过程,只要安装打开后就能直接上手使用.所以非常 ...
- Tomcat unable to start within 45 seconds.
解决的方法当然是设定这个时间,让其大于45秒,修改在当前项目所在的workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xm ...