Sergomen
@Sergomen
Просто делай добро и оно вернётся

Почему при вводе не числа выводится «terminate called after throwing an instance of 'errors'»?

Я пытаюсь сделать так чтобы при вводе не числа программа просила юзера ввести число повторно и так пока он не введёт число. Но получилось так что при вводе не числа выводится надпись
terminate called after throwing an instance of 'errors'
.

Почему так?
Код:
1.cpp

#include <iostream>

#include "sz.h"

using namespace std;

int main(){
    system("chcp 65001 && cls");

    printf("введи число:");
    int n = sz::in_is_int();

    cout << n << endl;
    
	return 0;
}



sz.h
#include <iostream>

using namespace std;

enum errors{
    not_int = 1 // не число

};

namespace sz{
    int in_is_int(){
        int res = 0;
        try{
            cin >> res;

            if (cin.fail()){ 
                cin.clear();
                cin.ignore(32767,'\n'); 
                throw not_int;
            }
        }
        catch (int e){
            printf("Це не число. Спробуй ще раз\n");
            return in_is_int();
        }
        return res;
    }
}
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 2
У вас исключение не ловится, попробуйте так
catch (errors){
            printf("Це не число. Спробуй ще раз\n");
            return in_is_int();
        }
Ответ написан
Можно сделать по тупому, если лень обрабатывать исключения:
int num{0};
    while(true)
    {
        std::cin >> num;
        if(std::cin.fail()) 
        {
		    std::cin.clear();
		    std::cin.ignore(32767, '\n');
		    std::cout << "Error!\n";
		    continue;
        }
        break;
    }
    
    std::cout << num << '\n';
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы