Программирование. Принципы и практика использования C++ Исправленное издание, стр. 146
Используя такую общую функцию
get_int()get_int()int get_int(int low, int high){ cout << "Пожалуйста, введите целое число из от " << low << " до " << high << " ( включительно ):\n"; while (true) { int n = get_int(); if (low<=n && n<=high) return n; cout << "Извините, " << n << " выходит за пределы интервала ["<< low << ':' << high << "]; попробуйте еще \n"; }}Этот вариант функции
get_int()Теперь можем написать код для ввода целых чисел.
int n = get_int(1,10);cout << "n: " << n << endl;int m = get_int(2,300);cout << "m: " << m << endl;Не забудьте предусмотреть перехват исключения, если не хотите получить сообщения об ошибках в (возможно, редкой) ситуации, когда функция
get_int()10.7.2. Отделение диалога от функции
Разные варианты функции
get_int()get_int()int strength = get_int(1,10,"Введите силу", "Вне диапазона, попробуйте еще");cout << " сила: " << strength << endl;int altitude = get_int(0,50000, "Пожалуйста, введите высоту в футах", "Вне диапазона, пожалуйста, попробуйте еще");cout << "высота: " << altitude << " футов над уровнем моря \n";Эту задачу можно решить так:
int get_int(int low, int high, const string& greeting, const string& sorry){ cout << greeting << ": [" << low << ':' << high << "]\n"; while (true) { int n = get_int(); if (low<=n && n<=high) return n; cout << sorry << ": [" << low << ':' << high << "]\n"; }}Довольно трудно составить произвольные сообщения из заготовок, поэтому необходимо выработать стиль сообщений. Часто это оказывается полезным и позволяет составлять действительно гибкие сообщения, необходимые для поддержки многих естественных языков (например, арабского, бенгальского, китайского, датского, английского и французского). Однако эта задача не для новичков.
Обратите внимание на то, что наше решение осталось незавершенным: функция
get_int()error()10.8. Операторы вывода, определенные пользователем
Определение оператора вывода
<<<<<<<<Рассмотрим простой оператор вывода для типа
Dateostream& operator<<(ostream& os, const Date& d){