2011-08-19 64 views
1

我在想,如果我們可以強制的std :: CIN因此它不執行數據類型之間的隱式轉換,對於如:如何強制std :: cin不做任何隱式轉換?

unsigned int number; 
cout<<"Please input a number :"; 
if(std::cin>>number)cout<<std::endl<<"Good number"; 
else cout<<"Bad number"; 

所以,如果你一拳-23或26.3,它只會執行隱轉換並存儲在number這是不是我想要的值。那麼我們可以阻止它嗎?

感謝

+0

如果你輸入'-23',你從流中讀取什麼?你能指望什麼? – Nawaz

+4

將其讀爲字符串並自行驗證輸入(?) – Kevin

+0

目前尚不清楚你想要什麼。你想讀一個字符串嗎? –

回答

2

cin是要值存儲到你所提供的數據類型。 unsigned int將不會採取signed號碼,因此它會溢出到最大unsigned int0。在你的例子中,你提供了一個double常數,它不是unsigned int。如果您希望它按照您的預期工作,請將您的unsigned int更改爲double

0

cin將始終執行該轉換;這不是你可以控制的東西。我建議將該值讀入一個字符串並檢查它是否爲.-,然後從那裏繼續。

+0

或者將它讀入一個字符串並使用'strtol()'或'strtoul()'來解析它。 –

+1

或者使用boost :: lexical_cast,如果不是所有的數據都被使用,它會拋出異常。 –