Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // Created by k3l on 22.11.2019.
- //
- #include <iostream>
- #include <csignal> // или signal.h
- using namespace std;
- void signal_handler_name(int i){ } // функция затычка
- int get_int(){
- string s;
- int result;
- getline(cin, s); // считали всю строку включая пробелы до первого '\n'
- bool flag = true;
- while (flag){ // проверка будет повторяться, пока флаг true
- flag = false; // установим флаг в false
- if(!((s[0] > '0' && s[0] < '9') || s[0] == '-')){ // первый символ должен быть цифрой или знаком -
- // если первый символ не - и не цира, то ошибка.
- cout << "Error\n";
- getline(cin, s);
- flag = true; // проверку придется проводить еще раз
- }
- for(int i = 1; i < s.size() && !flag; i++){ // все остальные символы должны быть только цифрами
- if(!(s[i] > '0' && s[0] < '9')){
- flag = true;
- cout << "Error\n";
- getline(cin, s);
- }
- }
- if(!flag){
- try{ // проверка, влезает ли число в int
- result = stoi(s); // преобразовываем в число
- return result; // если успешно преобразовалось, то возвращаем
- } catch (...){ // если нет, то как обычно пишем еррор и наш цикл продолжается
- cout << "Error\n";
- getline(cin, s);
- flag = true;
- }
- }
- }
- }
- int main() {
- // sigignore(SIGINT); // Ctrl + C
- // sigignore(SIGTSTP); // Ctrl + Z Эти две строки работают на linux и заменяют все остальное
- signal(SIGINT, signal_handler_name); // затыкаем этой функцией все, что попадется под руку
- signal(SIGTERM, signal_handler_name);
- signal(SIGABRT, signal_handler_name);
- signal(SIGTSTP, signal_handler_name);
- // Дальше любой код
- int i = get_int();
- }
Advertisement
Add Comment
Please, Sign In to add comment