2016-02-07 58 views
2

我試圖確保輸出中的第二列是對齊的,它看起來像setw會是解決方案,但無論我做第二列總是關閉。這是輸出,我從下面的代碼得到...使用C++ setw嘗試對齊第二列

1> 123 
10> 234 

,但我希望它是...

1> 123 
10> 234 

我能想到的唯一的另一件事是真正得到數的元素的實際數量是什麼數字,然後索引做了某種長度的計算。這似乎很多處理只是爲了讓第二列右對齊。

我也試過< <正確的,但因爲我在一個循環是印刷逐行這不會有所作爲

int main() 
{ 
    int array[2] = {123,234}; 
    int array2[2] = {1, 10}; 

    for(int i = 0; i < 2; i++){ 
     cout << array2[i] << "> " << setw(4) << array[i] << endl; 
    } 

    return 0; 
} 

回答

2

使用setw():

您需要設置寬度array2[i]元素而不是array[i]元素來獲得您要找的對齊方式。

cout << setw (2) << array2[i] << "> " << array[i] << endl; 

替代方法1:

使用printf這裏格式化打印。

printf ("%-2d> %4d\n", array2[i], array[i]); 

%-2d - 所述-2左對齊與寬度2.

%4d整數 - 的4右對齊與寬度4.

替代方法2的整數:

使用標籤或\t字符。

cout << array2[i] << ">\t" << array[i] << endl; 

\t你的光標條移動到下一個製表位,所以你最終會像你需要得到在列排列數據。我不建議你使用這種方法,因爲標籤寬度是不可預測的。

+0

謝謝!對於第一種方法,它將向右推1>一個空格。我想保持它左對齊。儘管我會嘗試printf選項!我必須添加字符串,但應該可行 – cpd1

+0

我仍然有問題得到我想要的格式,但這是因爲數字前面的字符。我最終將數字轉換爲一個字符串並將其連接到字符中。然後,我可以正確地使用setwl – cpd1

2

使用一個單獨的'\t'字符,它會自動標記另一列。例如:

for(int i = 0; i < 10; i++) 
     cout << "x=" << (rand()%10000000+2000)/30 << "\t\ty=" << rand()%2000 << endl; 

輸出爲:

x=+231096  y=+1383 
x=+154630  y=+777 
x=+141344  y=+1793 
x=+325416  y=+1386 
x=+321447  y=+649 
x=+16400  y=+362 
x=+84068  y=+690 
x=+250530  y=+1763 
x=+12847  y=+540 
x=+115257  y=+1172 

注:我使用克++與標誌-std = C++ 11爲C++ 11,我不知道它的影響的結果。

+0

是的,而且在語義上是正確的,但實際上這可能沒有預期的效果。這是因爲製表符寬度不可預測,您的數據可能不適合某個人的設置。這可以說是更好的去異端和在這裏使用空間。 –

+0

Tab確實對齊它,但是我沒有控制空間的數量。技術上我想要的 – cpd1

相關問題