#include <iostream>
#include <limits>
#include <assert.h>
using std::cout;
using std::cin;
using std::endl;
using std::numeric_limits;
using std::streamsize;
void SetRussianLocale() { setlocale(LC_ALL, "Russian"); }
void ClearCin() {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
struct Range {
int from;
int to;
};
bool IsValueInRange(int value, const Range &range) {
return value >= range.from && value <= range.to;
}
bool IsValidRange(const Range &range) { return range.from < range.to; }
void AskUserValueInRange(const Range &range) {
assert(IsValidRange(range));
cout << "Введите число от " << range.from << " до " << range.to << endl;
}
int GetIntegerValueInRangeFromUser(const Range &range) {
int value = range.from;
while (!(cin >> value) || !IsValueInRange(value, range)) {
AskUserValueInRange(range);
ClearCin();
}
return value;
}
int main() {
SetRussianLocale();
const Range kDefaultRange{0, 99};
int value_one_ = GetIntegerValueInRangeFromUser(kDefaultRange);
int value_two_ = GetIntegerValueInRangeFromUser(kDefaultRange);
cout << "value_one_: " << value_one_ << " value_two_: " << value_two_;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGltaXRzPgojaW5jbHVkZSA8YXNzZXJ0Lmg+Cgp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6Y2luOwp1c2luZyBzdGQ6OmVuZGw7CnVzaW5nIHN0ZDo6bnVtZXJpY19saW1pdHM7CnVzaW5nIHN0ZDo6c3RyZWFtc2l6ZTsKCnZvaWQgU2V0UnVzc2lhbkxvY2FsZSgpIHsgc2V0bG9jYWxlKExDX0FMTCwgIlJ1c3NpYW4iKTsgfQoKdm9pZCBDbGVhckNpbigpIHsKICBjaW4uY2xlYXIoKTsKICBjaW4uaWdub3JlKG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSwgJ1xuJyk7Cn0KCnN0cnVjdCBSYW5nZSB7CiAgaW50IGZyb207CiAgaW50IHRvOwp9OwoKYm9vbCBJc1ZhbHVlSW5SYW5nZShpbnQgdmFsdWUsIGNvbnN0IFJhbmdlICZyYW5nZSkgewogIHJldHVybiB2YWx1ZSA+PSByYW5nZS5mcm9tICYmIHZhbHVlIDw9IHJhbmdlLnRvOwp9Cgpib29sIElzVmFsaWRSYW5nZShjb25zdCBSYW5nZSAmcmFuZ2UpIHsgcmV0dXJuIHJhbmdlLmZyb20gPCByYW5nZS50bzsgfQoKdm9pZCBBc2tVc2VyVmFsdWVJblJhbmdlKGNvbnN0IFJhbmdlICZyYW5nZSkgewogIGFzc2VydChJc1ZhbGlkUmFuZ2UocmFuZ2UpKTsKICBjb3V0IDw8ICLQktCy0LXQtNC40YLQtSDRh9C40YHQu9C+INC+0YIgIiA8PCByYW5nZS5mcm9tIDw8ICIg0LTQviAiIDw8IHJhbmdlLnRvIDw8IGVuZGw7Cn0KCmludCBHZXRJbnRlZ2VyVmFsdWVJblJhbmdlRnJvbVVzZXIoY29uc3QgUmFuZ2UgJnJhbmdlKSB7CiAgaW50IHZhbHVlID0gcmFuZ2UuZnJvbTsKICB3aGlsZSAoIShjaW4gPj4gdmFsdWUpIHx8ICFJc1ZhbHVlSW5SYW5nZSh2YWx1ZSwgcmFuZ2UpKSB7CiAgICBBc2tVc2VyVmFsdWVJblJhbmdlKHJhbmdlKTsKICAgIENsZWFyQ2luKCk7CiAgfQogIHJldHVybiB2YWx1ZTsKfQoKaW50IG1haW4oKSB7CiAgU2V0UnVzc2lhbkxvY2FsZSgpOwogIGNvbnN0IFJhbmdlIGtEZWZhdWx0UmFuZ2V7MCwgOTl9OwogIGludCB2YWx1ZV9vbmVfID0gR2V0SW50ZWdlclZhbHVlSW5SYW5nZUZyb21Vc2VyKGtEZWZhdWx0UmFuZ2UpOwogIGludCB2YWx1ZV90d29fID0gR2V0SW50ZWdlclZhbHVlSW5SYW5nZUZyb21Vc2VyKGtEZWZhdWx0UmFuZ2UpOwogIGNvdXQgPDwgInZhbHVlX29uZV86ICIgPDwgdmFsdWVfb25lXyA8PCAiIHZhbHVlX3R3b186ICIgPDwgdmFsdWVfdHdvXzsKfQo=