2016-05-16 59 views
0

我正在使用\t來隔離我的輸出,但它會產生不一致的空格。Tab' t'間距不一致

例如,下面的代碼產生

#include <iostream> 

int main() 
{ 
    std::cout << "Terms\tResults\tet(%)\tea(%)\n"; 
    return 0; 
} 

Terms Results et(%) ea(%)

注空間

的差別爲什麼會這樣呢?

+0

這太奇怪了,如果我在''t''和'Result'之間放置一個空格,Result和et之間的選項卡會更長.... – Rakete1111

+0

@ Rakete1111,我試過這個,但輸出很難看。 – CroCo

+8

如果您不想要變量間距,請勿使用選項卡。 –

回答

2

單詞「tab」是來自「table」或「tabulate」的前綴。選項卡的目的是生成垂直對齊,例如將文本排列到表格列中,或者爲每個段落實現一致的前導縮進。標籤的目的不是產生相等的水平間距。選項卡生成多少空間取決於它與下一個製表符的距離。這就是爲什麼你看到「空間差異」

製表符字符及其在終端設備上的解釋始於打字機上的Tab鍵。打字機上的Tab鍵觸發滑架的運動,滑架停在下一個製表位。打字員製表位可由打字員通過移動機械滑塊進行配置。

在字符顯示設備上,ASCII TAB字符的工作方式類似:前進到下一個標籤位置。製表位通常每八個字符。 (在某些終端上,它們可以通過固件中的菜單進行配置,甚至可以轉義主機可以產生的序列)。

現代文字處理程序仍然模仿打字機制表符停止滑塊作爲楔形元素,可以添加到「標尺」和移動。

試試這個:

std::cout << "Terms\tResults\tet(%)\tea(%)\n"; 
std<<cout << "a\tb\t\tc\n" 

您應該看到表格的對齊方式:

Terms Results et(%) ea(%) 
a  b    c 

報告中,我們不得不用兩個標籤b後因爲Results et ...場溢出標籤的位置。

理想情況下,我們應該根據表格中列的寬度要求移動製表位。但移動製表符停止是非常不便攜的。出於這個原因,在計算機程序的輸出中使用製表符垂直對齊基本上不是很可行;使用空格可以更好地實現列式格式。一個好的格式化函數可以提供任意的字段寬度,在一個字段中可以左對齊,居中或右對齊。

6

製表符結束每個第8列。

v  v  v  v  v 
1234567812345678123456781234567812345678 
Terms Results et(%) ea(%) 
+0

如何在字符串之間創建相等的空格呢? – CroCo

+0

這是真的,每8個空格?我認爲標籤可以設置2,3或4個空格,例如編輯允許。 –

+0

@CroCo,只需使用相同數量的空格? – Qwertiy