fork(1) download
  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. //Объявляем функцию шаблон
  6. //Функция вернёт ИСТИНА если параметр val был веден корректно
  7. //в противном случае возврат от функции ЛОЖЬ
  8. template <class T>
  9. bool SafeInput
  10. (
  11. const char * msg,//сообщение которое будет сопутствовать вводу
  12. T &val
  13. );
  14.  
  15. int main()
  16. {
  17. int iVal;//Целочисленная переменная
  18. double dVal;//Вещественная переменная
  19. unsigned i=0;
  20. while(i<2)
  21. {
  22. if(!SafeInput("Enter integer : ",iVal))//Безопасный ввод int
  23. cout<<"Incorrect input"<<endl;
  24. else
  25. cout<<"Your input : "<<iVal<<endl;
  26.  
  27. if(!SafeInput("Enter double : ",dVal))//Безопасный ввод double
  28. cout<<"Incorrect input"<<endl;
  29. else
  30. cout<<"Your input : "<<dVal<<endl;
  31. ++i;
  32. }
  33. return 0;
  34. }
  35.  
  36. template <class T>
  37. bool SafeInput
  38. (
  39. const char * msg,//сообщение которое будет сопутствовать вводу
  40. T &val
  41. )
  42. {
  43. bool bOk = true;//Флаг успешного ввода
  44. cout<<msg;//Вывод на экран сопутствующего сообщения
  45. //Проверка на корректный ввод должна содержать не только if(!(cin>>val) )
  46. //но и проверку на то что строка более не содержит символов т.е cin.get() != '\n'
  47. if(!(cin>>val) || cin.get() != '\n')
  48. bOk = false;
  49. if(!bOk)
  50. {
  51. cin.clear();//Сброс флагов ошибок
  52. cin.sync();//Очистка буфера ввода
  53. }
  54. return bOk;
  55. }
Success #stdin #stdout 0s 3032KB
stdin
3  
5.56 
6
7.89
stdout
Enter integer : Incorrect input
Enter double  : Incorrect input
Enter integer : Your input : 6
Enter double  : Incorrect input