为什么C ++中的setiosflags似乎没有设置指定的标志?

时间:2016-12-27 07:31:41

标签: c++

#include <iostream>
#include <iomanip>

using namespace std;

int main() {
    int x = 44;
    cout << setiosflags(ios::oct) << x;
}

为什么我将输出设为(十进制)44而不是(八进制)54?我怎么能改变这个?

2 个答案:

答案 0 :(得分:2)

请参阅documentation,您应首先清除所有格式标志

  

当在表达式中使用&lt;&lt; resetiosflags(mask)或in&gt;&gt;   resetiosflags(mask),清除流中或流出的所有格式标志   由面具指定。

写这样的东西;

cout << std::resetiosflags(std::ios_base::dec) << setiosflags(ios_base::oct) << x;

答案 1 :(得分:0)

由于您仅设置单个标志,直接设置use the std::oct manipulator,而不设置std::ios_base::oct标志:

std::cout << std::oct << x;

使用setiosflags时,还需要使用resetiosflags清除已经设置的标志。