Как проверить шестнадцатеричный ввод с помощью std :: cin? - PullRequest
2 голосов
/ 18 марта 2011

Я сделал следующий метод, как в 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 очищается и игнорируется.

Ответы [ 2 ]

5 голосов
/ 18 марта 2011

Думаю, я бы сделал что-то вроде этого:

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. читать всю строку,
  2. подтвердить это
  3. конвертировать, если хорошо.
1 голос
/ 18 марта 2011

Захватите ввод с помощью getline() и пошагово пролистайте строку, убедившись, что есть только цифры и буквы A-F (и, возможно, ведущий 0x)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...