【问题标题】:Formatting the output stream, ios::left and ios::right格式化输出流,ios::left 和 ios::right
【发布时间】:2012-04-14 09:30:21
【问题描述】:

我有这个代码:

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' 但没有区别?

【问题讨论】:

    标签: c++ stream iostream


    【解决方案1】:

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

    // 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';
    

    【讨论】:

      【解决方案2】:

      您必须先清除调整字段中的先前值,然后才能设置新值。

      试试这个:

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

      【讨论】:

        【解决方案3】:

        使用带有掩码的 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
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            看起来如果同时设置了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
            

            【讨论】:

              猜你喜欢
              • 2013-10-08
              • 1970-01-01
              • 1970-01-01
              • 2012-10-02
              • 2022-01-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多