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

Using c++ setw to try to align second column

我正在尝试确保输出中的第二列已对齐,似乎 setw 是解决方案,但无论我做什么,第二列始终处于关闭状态。这是我从下面的代码中得到的输出...

1> 123
10> 234

但我希望它是...

1>   123
10>  234

我唯一能想到的另一件事是实际获取元素的实际数量和索引的位数,然后从中进行某种长度计算。为了使第二列右对齐,这似乎需要大量处理。

我也试过 << right 但因为我是在循环中逐行打印,所以这不会有什么不同

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;
 }

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

使用单个 '\t' 字符,它会自动 TAB 到另一列。示例:

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++,我不知道它会影响结果。