如何使用std :: cin验证十六进制输入?

Amu*_*umu 2 c++ input

我在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被清除并被忽略.

Jer*_*fin 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;
}
Run Code Online (Sandbox Code Playgroud)

有很多变化,但我要遵循的三个步骤是:

  1. 读全行,
  2. 验证它
  3. 转换,如果好.