格式化输出流,ios::left和ios::right



我有这个代码:

cout << std::setiosflags(std::ios::right);
cout << setw(3) << 1 << setw(3) << 2 << 'n'; // Output two values
cout << std::setiosflags(std::ios::left);
cout << setw(3) << 1 << setw(3) << 2 << 'n'; // Output two values

但产出并没有达到我的预期。而不是:

  1  2
1  2  

结果是:

  1  2
  1  2

问题出在哪里?我设置了"std::ios::left",但没有区别?

除非你感到受虐,否则只需使用:

// right justify by default.
cout << setw(3) << 1 << setw(3) << 2 << 'n';
// left justify
cout << std::left << setw(3) << 1 << setw(3) << 2 << 'n';
// right justify again.
cout << std::right << setw(3) << 1 << setw(3) << 2 << 'n';

在设置新值之前,必须清除adjustfield中的前一个值。

试试这个:

#include <iostream>
#include <iomanip>
int main () {
  std::cout << std::resetiosflags(std::ios::adjustfield);
  std::cout << std::setiosflags(std::ios::right);
  std::cout << std::setw(3) << 1 << std::setw(3) << 2 << 'n';
  std::cout << std::resetiosflags(std::ios::adjustfield);
  std::cout << std::setiosflags(std::ios::left);
  std::cout << std::setw(3) << 1 << std::setw(3) << 2 << 'n';
}

使用带掩码的setf(无需重置标志)

using namespace std;
cout.setf(ios::right, ios::adjustfield);
cout << setw(3) << 1 << setw(3) << 2 << 'n'; // Output two values
cout.setf(ios::left, ios::adjustfield);
cout << setw(3) << 1 << setw(3) << 2 << 'n'; // Output two values

您的代码希望将std::resetiosflags(std::ios::right)发送到输出流以撤消前面的std::setiosflags(std::ios::right)

如果同时设置了leftright标志,则首先设置的标志优先。如果我在设置left之前明确重置right标志,我会得到您期望的输出:

cout << std::setiosflags(std::ios::right);
cout << setw(3) << 1 << setw(3) << 2 << 'n'; // Output two values
cout << resetiosflags(std::ios::right);
cout << std::setiosflags(std::ios::left);
cout << setw(3) << 1 << setw(3) << 2 << 'n'; // Output two values

相关内容

  • 没有找到相关文章

最新更新