Kiri3L

Untitled

Nov 26th, 2019
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. //
  2. // Created by k3l on 22.11.2019.
  3. //
  4.  
  5. #include <iostream>
  6. #include <csignal> // или signal.h
  7. using namespace std;
  8.  
  9. void signal_handler_name(int i){ } // функция затычка
  10.  
  11. int get_int(){
  12. string s;
  13. int result;
  14. getline(cin, s); // считали всю строку включая пробелы до первого '\n'
  15. bool flag = true;
  16. while (flag){ // проверка будет повторяться, пока флаг true
  17. flag = false; // установим флаг в false
  18. if(!((s[0] > '0' && s[0] < '9') || s[0] == '-')){ // первый символ должен быть цифрой или знаком -
  19. // если первый символ не - и не цира, то ошибка.
  20. cout << "Error\n";
  21. getline(cin, s);
  22. flag = true; // проверку придется проводить еще раз
  23. }
  24. for(int i = 1; i < s.size() && !flag; i++){ // все остальные символы должны быть только цифрами
  25. if(!(s[i] > '0' && s[0] < '9')){
  26. flag = true;
  27. cout << "Error\n";
  28. getline(cin, s);
  29. }
  30. }
  31. if(!flag){
  32. try{ // проверка, влезает ли число в int
  33. result = stoi(s); // преобразовываем в число
  34. return result; // если успешно преобразовалось, то возвращаем
  35. } catch (...){ // если нет, то как обычно пишем еррор и наш цикл продолжается
  36. cout << "Error\n";
  37. getline(cin, s);
  38. flag = true;
  39. }
  40. }
  41. }
  42. }
  43.  
  44.  
  45. int main() {
  46. // sigignore(SIGINT); // Ctrl + C
  47. // sigignore(SIGTSTP); // Ctrl + Z Эти две строки работают на linux и заменяют все остальное
  48.  
  49. signal(SIGINT, signal_handler_name); // затыкаем этой функцией все, что попадется под руку
  50. signal(SIGTERM, signal_handler_name);
  51. signal(SIGABRT, signal_handler_name);
  52. signal(SIGTSTP, signal_handler_name);
  53. // Дальше любой код
  54.  
  55. int i = get_int();
  56.  
  57. }
Advertisement
Add Comment
Please, Sign In to add comment