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

Vis*_*iva 8 c++ iostream stream

我有这个代码:

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
Run Code Online (Sandbox Code Playgroud)

但输出并不像我预期的那样.代替:

  1  2
1  2  
Run Code Online (Sandbox Code Playgroud)

这出来了:

  1  2
  1  2
Run Code Online (Sandbox Code Playgroud)

问题是什么?我设置'std :: ios :: left'但它没有区别?

Jer*_*fin 17

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

// 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';
Run Code Online (Sandbox Code Playgroud)


Rob*_*obᵩ 8

您必须先清除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';
}
Run Code Online (Sandbox Code Playgroud)


Wil*_*lem 7

使用带掩码的setf(不需要resetiosflags)

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
Run Code Online (Sandbox Code Playgroud)