2

我试图确保输出中的第二列是对齐的,看起来 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;
 }
4

2 回答 2

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

于 2016-02-07T03:24:23.493 回答
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++,我不知道它会影响结果。

于 2016-02-07T03:24:43.570 回答