#include <string>
#include <iostream>
using namespace std;
//Объявляем функцию шаблон
//Функция вернёт ИСТИНА если параметр val был веден корректно
//в противном случае возврат от функции ЛОЖЬ
template <class T>
bool SafeInput
(
const char * msg,//сообщение которое будет сопутствовать вводу
T &val
);
int main()
{
int iVal;//Целочисленная переменная
double dVal;//Вещественная переменная
unsigned i=0;
while(i<2)
{
if(!SafeInput("Enter integer : ",iVal))//Безопасный ввод int
cout<<"Incorrect input"<<endl;
else
cout<<"Your input : "<<iVal<<endl;
if(!SafeInput("Enter double : ",dVal))//Безопасный ввод double
cout<<"Incorrect input"<<endl;
else
cout<<"Your input : "<<dVal<<endl;
++i;
}
return 0;
}
template <class T>
bool SafeInput
(
const char * msg,//сообщение которое будет сопутствовать вводу
T &val
)
{
bool bOk = true;//Флаг успешного ввода
cout<<msg;//Вывод на экран сопутствующего сообщения
//Проверка на корректный ввод должна содержать не только if(!(cin>>val) )
//но и проверку на то что строка более не содержит символов т.е cin.get() != '\n'
if(!(cin>>val) || cin.get() != '\n')
bOk = false;
if(!bOk)
{
cin.clear();//Сброс флагов ошибок
cin.sync();//Очистка буфера ввода
}
return bOk;
}