2011-08-19 56 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,如果不是所有的数据都被使用,它会抛出异常。 –