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其實也是一樣的,優先保證把數據顯示完整。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM