使用IOS成员格式化

时间:2011-08-10 07:09:28

标签: c++ iostream

我有以下代码,只是看看它

#include<iostream>
#include<conio.h>
#include<string>
using namespace std;

int main()
{
    float a=56;
    cout.setf(ios::hex);

    cout<<"\nyou have entered "<<a;/*this statement must output a value in hexadecimal*/
    _getch();
    cout.unsetf(ios::hex);
    cout<<"\n modified value"<<a; /*& it should give me an answer 56*/

    _getch();
    return 0;
}

但是第一个评论声明对我不起作用,它也打印出来56.我是在做错,还是其他什么?
(我使用的是visual c ++,编译器)。

2 个答案:

答案 0 :(得分:4)

您必须使用setf的两个参数版本,因为格式标志的基本设置不是单个位,它使用多个位:

std::cout.setf( std::ios_base::hex, std::ios_base::basefield );

setf的两个参数版本确保实际清除了需要清除的basefield位。

同样,你不能“取消设置”hex,因为它不是一个位,你必须设置不同的基础:

std::cout.setf( std::ios_base::dec, std::ios_base::basefield );

最重要的是:请注意,在当前标准中,ostream的十六进制格式仅适用于整数,而不适用于浮点类型。您将需要使用或强制转换为整数以查看十六进制输出。

为避免所有疑问,此代码示例按预期“正常工作”:

#include <iostream>
#include <ostream>

int main()
{
    int a = 56;
    std::cout.setf( std::ios_base::hex, std::ios_base::basefield );
    std::cout << "Hex: " << a << '\n';
    std::cout.setf( std::ios_base::dec, std::ios_base::basefield );
    std::cout << "Dec: " << a << '\n';
    return 0;
}

输出:

Hex: 38
Dec: 56

答案 1 :(得分:0)

尝试使用

cout.setf(ios::hex, ios::basefield);

或只是

cout << ios::hex;