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其实也是一样的,优先保证把数据显示完整。

  • 相关阅读:
    PHP保留小数的相关方法
    ASP.NET Core MVC 之过滤器(Filter)
    ASP.NET Core MVC 之控制器(Controller)
    ASP.NET Core MVC 之视图组件(View Component)
    ASP.NET Core MVC 之局部视图(Partial Views)
    标签助手(TagHelper)
    ASP.NET Core MVC 之布局(Layout)
    ASP.NET Core MVC 之视图(Views)
    ASP.NET Core MVC 之模型(Model)
    九卷读书:淘宝从小到大的发展 -重读《淘宝技术这十年》
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4176191.html
Copyright © 2011-2022 走看看