首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用IOS成员设置格式

使用IOS成员设置格式
EN

Stack Overflow用户
提问于 2011-08-10 15:09:28
回答 2查看 731关注 0票数 1

我有以下代码,请看一下

代码语言:javascript
运行
复制
#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。我是不是做错了什么?

(我使用的是可视化的c++编译器)。

EN

回答 2

Stack Overflow用户

发布于 2011-08-10 15:12:38

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

代码语言:javascript
运行
复制
std::cout.setf( std::ios_base::hex, std::ios_base::basefield );

双参数版本的setf可确保实际清除需要清除的basefield位。

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

代码语言:javascript
运行
复制
std::cout.setf( std::ios_base::dec, std::ios_base::basefield );

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

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

代码语言:javascript
运行
复制
#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;
}

输出:

代码语言:javascript
运行
复制
Hex: 38
Dec: 56
票数 4
EN

Stack Overflow用户

发布于 2011-08-10 15:12:12

尝试使用

代码语言:javascript
运行
复制
cout.setf(ios::hex, ios::basefield);

或者只是

代码语言:javascript
运行
复制
cout << ios::hex;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7007054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档