使用c ++ setw尝试对齐第二列

时间:2016-02-07 03:09:43

标签: c++ setw

我正在尝试确保输出中的第二列是对齐的,看起来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 个答案:

答案 0 :(得分:3)

使用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将光标栏移动到下一个tabstop,因此您最终会根据需要在列中对齐数据。我不建议您使用此方法,因为标签宽度是不可预测的。

答案 1 :(得分: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

注意:对于C ++ 11,我使用带有标志-std = c ++ 11的g ++,我不知道它会影响结果。