zoukankan      html  css  js  c++  java
  • 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 << "
    ";
    	cout.width(5);
    	cout << "N" << ":";
    	cout.width(8);
    	cout << "N * N" << "
    ";
    	for (long i = 1; i <= 100; i *= 10){
    		cout.width(5);
    		cout << i << ':';
    		cout.width(8);
    		cout << i * i << "
    ";
    	}
    	return 0;
    }
    

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    Vue.nextTick()的介绍和使用场景
    JS实现数据双向绑定
    JS对象的可枚举属性和不可枚举属性
    JS中对象转数组方法总结
    Vmware虚拟机安装XP系统
    javascript和c#的深度拷贝的一种通用方法
    c# SQLServer导入大批量数据
    PowerDesigner逆向工程,从SQL Server数据库生成Physical Model -----数据源方式
    虚拟机和主机ping不通,SQL Server无法远程连接的解决方法
    c#生成试卷。。。
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4176191.html
Copyright © 2011-2022 走看看