我在http://www.parashift.com/c++-faq-lite/input-output.html中执行了以下方法来验证,但它不起作用:
if (!(cin >> hex >>address1))
{
cout << "Invalid input.";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
它继续将剩余的输入传递给下一个输入,因此用户无法输入下一个输入,即使std :: cin被清除并被忽略。
答案 0 :(得分:5)
我想我会做这样的事情:
std::getline(cin, your_string);
if (your_string.find_first_not_of("0123456789abcdefABCDEF") != std::string::npos)
error("Non-hexadecimal input");
else {
std::istringstream is(your_string);
is >> std::hex >> address1;
}
有很多变化,但我要遵循的三个步骤是:
答案 1 :(得分:1)
使用getline()
抓取输入并逐步执行字符串,确保只有数字和字母A-F(可能是前导0x)