我要求用户输入整数,并且我不想执行代码,除非它是严格的整数。
int x;
if(cin >> x)
例如,如果用户在上面输入一个双精度值,则 if 语句将执行隐式转换为整数。相反,我根本不希望代码执行。
我怎样才能防止这种情况发生?
那里没有转换。如果用户输入一个分数(没有double
),那么>>
提取在小数点处停止。
http://ideone.com/azdOrO http://ideone.com/azdOrO
int main() {
int x;
std::cin >> x;
std::cout << std::cin.rdbuf();
}
input:
123.456
output:
.456
如果您想将小数点的存在标记为错误,则必须执行某些操作才能从中提取它cin
并检测它。
C++ 流的一种很好的解析策略是getline
你所知道的将被加工成istringstream
, 叫它s
,然后检查一下s.peek() == std::char_traits<char>::eof()
当你完成时。如果你不使用getline
拉取个人号码,然后peek
可以检查下一个字符是否是空格(使用std::isspace
)而不消耗流中的该字符。
检查输入是否完成的最干净的方法可能是使用std::istream::sentry
.
if ( ! ( std::cin >> x ) || std::istream::sentry( std::cin ) ) {
std::cerr << "Invalid or excessive input.\n";
}
这会消耗输入末尾的空间。sentry
还提供了一个noskipws
避免消耗空间的选项。
if ( ! ( std::cin >> x ) || std::istream::sentry( std::cin, true ) ) {
std::cerr << "Invalid or excessive input. (No space allowed at end!)\n";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)