Я некоторое время осматривал inte rnet и обнаружил, что C ++ способ получения пользовательского ввода в виде шестнадцатеричного числа использует cin >> hex >> variable
. Я не могу заставить это работать в моей ситуации. Вот что я хочу сделать для диапазона пользовательских вводов:
>0xFF -> variable = 0xFF;
>FF -> variable = 0xFF;
>122 -> variable = 0x122;
>garbage -> ask again;
>0XFfFfA -> variable = 0xFFFFA;
Вот код, который у меня есть, и проблема с ним:
int endAddr;
do { printf("Enter end addr: "); } while (!(cin >> hex >> endAddr));
Проблема: после ввода мусора это продолжает l oop распечатывать «Enter end addr:» вместо того, чтобы позволить пользователю повторить попытку.
Любая помощь относительно этого фрагмента кода была бы очень полезна. Заранее спасибо.
РЕДАКТИРОВАТЬ:
В соответствии с предложением я посмотрел на этот пост и соответственно скорректировал мой код:
while (true) {
printf("Enter start addr: ");
if (cin >> hex >> startAddr) {
break;
}
cin.clear();
cin.ignore();
}
//rest of code
проблема заключается в том, что если я введу строку, такую как le
, она снова напечатает подсказку, но затем продолжит работу с остальным кодом. Почему это? Если я уберу cin.ignore()
, то получится зацикленное выше.