我在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');
}
Run Code Online (Sandbox Code Playgroud)
它继续将剩余的输入传送到下一个输入,从而使得用户无法输入下一个输入,即使std :: cin被清除并被忽略.
我想我会做这样的事情:
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;
}
Run Code Online (Sandbox Code Playgroud)
有很多变化,但我要遵循的三个步骤是: