Код ошибок не вызывает, однако, при запуске кода - он даже не ждет пока пользователь введет значение и просто закрывается. Как это исправить? Так же интересует: обязательно ли (...) в catch блоке, или нужно словить какой-то определенный exception?
void d() {
int f;
try {
std::cin>>f;
} catch(...) {
if(f!=1 | f!=2 | f!=3) {
std::cin>>f;
}
}
}
Скорее всего у вас какой-то мусор попадает в cin с прошлого ввода или вывода, используйте
cin.ignore(); перед чтением строки.
Оператор catch сработает только в том случае, если будет выброшено исключение, скорее всего сам cin его не вызовет.
А для того чтобы он точно вызвался нужно его выбросить самостоятельно с помощью throw.
void d() {
int f;
try {
std::cin.ignore()
std::cin>>f;
if(f!=1 || f!=2 || f!=3){
throw(f);
}
} catch(...) {
std::cout<<"Exception is occurred";
}
}
1) Поставьте галку Run in terminal
2) Как вам уже скаазли if(f!=1 | f!=2 | f!=3) выполянет побитовое or. А вам, скорее всего, нужно логическое - ||
3) Но даже правильно записанное условие смысла не имеет if(f!=1 || f!=2 || f!=3). Оно всегда дает true и , возможно, какой-то ваш код из-за этого не никогда не выполнится(ветка else?). О чем вас и предупреждает статический анализатор или компилятор. Возможно вам нужно логическое and - &&
4) iostream по-умолчанию не бросает исключения. Чтобы включить это поведение нужно иcпользовать std::basic_ios<CharT,Traits>::exceptions
Продвижение своими сайтами как стратегия роста и независимости