2016-02-07 29 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

相关问题