我正在尝试确保输出中的第二列是对齐的,看起来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;
}
答案 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 ++,我不知道它会影响结果。