2011-08-10 40 views
1

我有以下的代碼,只需看看它格式化使用IOS成員

#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++編譯器)。

回答

0

使用

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

或只是

cout << ios::hex; 
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 
+0

但是當我實施了SETF()你的建議,它的工作原理,但即使忽略你關於unsetf()的建議,它仍然有效,也就是說,它產生了我分配的值56 ... ?????發生了什麼 – nobalG

+0

人們不傾向於用多個問題回答問題在他們標記。 – Puppy

+0

我已經使用int測試了它,但是使用setf()和一個參數甚至不能像第一條評論中所述的那樣工作 – nobalG