C++ 如何强制std::cin不进行任何隐式转换?
我想知道我们是否可以强制std::cin,这样它就不会在数据类型之间执行任何隐式转换,例如:C++ 如何强制std::cin不进行任何隐式转换?,c++,C++,我想知道我们是否可以强制std::cin,这样它就不会在数据类型之间执行任何隐式转换,例如: unsigned int number; cout<<"Please input a number :"; if(std::cin>>number)cout<<std::endl<<"Good number"; else cout<<"Bad number"; 无符号整数; coutnumber)coutcin将把值存储到您提供的数据类型中u
unsigned int number;
cout<<"Please input a number :";
if(std::cin>>number)cout<<std::endl<<"Good number";
else cout<<"Bad number";
无符号整数;
coutnumber)coutcin
将把值存储到您提供的数据类型中unsigned int
不会接受signed
数字,因此它将溢出到最大的unsigned int
或0
。在您的示例中,您提供了一个double
常量,它不是无符号int
。如果你想让你的unsigned int
按你想要的方式工作,把它改成double
。cin
将始终执行该转换;这不是你能控制的。我建议将该值读入字符串,并检查其
或-
,然后从那里开始。如果输入-23
,您希望从流中读取什么?你期望得到什么?将其作为字符串读取,然后自己验证输入(?)不清楚你想要什么。你想读一个字符串吗?@Anubis先生:你想要一个异常而不是静默转换吗?或者把它读成一个字符串,然后用strtol()
或strtoul()
来解析它。或者用boost::lexical\u cast,如果没有使用所有数据,它会抛出一个异常。