fork download
  1. #include <iostream>
  2. #include <limits>
  3. #include <assert.h>
  4.  
  5. using std::cout;
  6. using std::cin;
  7. using std::endl;
  8. using std::numeric_limits;
  9. using std::streamsize;
  10.  
  11. void SetRussianLocale() { setlocale(LC_ALL, "Russian"); }
  12.  
  13. void ClearCin() {
  14. cin.clear();
  15. cin.ignore(numeric_limits<streamsize>::max(), '\n');
  16. }
  17.  
  18. struct Range {
  19. int from;
  20. int to;
  21. };
  22.  
  23. bool IsValueInRange(int value, const Range &range) {
  24. return value >= range.from && value <= range.to;
  25. }
  26.  
  27. bool IsValidRange(const Range &range) { return range.from < range.to; }
  28.  
  29. void AskUserValueInRange(const Range &range) {
  30. assert(IsValidRange(range));
  31. cout << "Введите число от " << range.from << " до " << range.to << endl;
  32. }
  33.  
  34. int GetIntegerValueInRangeFromUser(const Range &range) {
  35. int value = range.from;
  36. while (!(cin >> value) || !IsValueInRange(value, range)) {
  37. AskUserValueInRange(range);
  38. ClearCin();
  39. }
  40. return value;
  41. }
  42.  
  43. int main() {
  44. SetRussianLocale();
  45. const Range kDefaultRange{0, 99};
  46. int value_one_ = GetIntegerValueInRangeFromUser(kDefaultRange);
  47. int value_two_ = GetIntegerValueInRangeFromUser(kDefaultRange);
  48. cout << "value_one_: " << value_one_ << " value_two_: " << value_two_;
  49. }
  50.  
Success #stdin #stdout 0s 3464KB
stdin
10000
4
-10
42
stdout
Введите число от 0 до 99
Введите число от 0 до 99
value_one_: 4 value_two_: 42