Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Возник вопрос с исключениями в c++ try catch throw

SN@KE Профи (590), закрыт 12 лет назад
У меня есть код:
int n;
try
{
cin>>n;

}
catch (...)
{
cout<<"Error";
}

как можно сделать чтобы при вводе в n буквы программа выводила на экран ошибку или выполняла другие нужные мне действия?

когда я писал
int n;
try
{
cin>>n;
throw 1;

}
catch (...)
{
cout<<"Error";
}

программа в любом случае выводила мне ошибку из блока catch

Помогите разобраться нубу)
Лучший ответ
ra Высший разум (113320) 12 лет назад
Можно обойтись без исключений:

if (cin >> n) {
cout << n;
} else {
cout << "intput error\n";
}

или не обходится:

cin.exceptions(ios::failbit | ios::badbit );
try {
cin >> n;
} catch (istream::failure e) {
cout << e.what();
}

SN@KEПрофи (590) 12 лет назад
спасибо большое) я так понял тут используется вылавливание ошибки именно на потоках ввода вывода.
А вот если допустим у меня используется следующий алгоритм:
1)Создается указатель на динамическу область памяти.
2)С этой памятью происходят какие-то действия (запись, чтение и тд...)
3)Эта память освобождается командой delete
4)Происходит попытка вывода на экран удаленной области памяти по тому же указателю (указатель не принимает значение NULL после высвобождения памяти)

Вопрос как с помощью исключения можно будет обработать ошибку на обращение по указателю на несуществующую память т. е. обработать пункт 4.
ra Высший разум (113320) никак delete просто указывает диспетчеру памяти, что данный кусок свободен и при следующем запросе его можно отдать, память от этого несуществующей не стала, как существовала, так и продолжает существовать.
Остальные ответы
Зло Просветленный (39332) 12 лет назад
не понял вопроса, но, может быть
int n;
try
{
cin>>n;
if( some condition ) throw 1;
}
catch (...)
{
cout<<"Error";
}
SN@KEПрофи (590) 12 лет назад
вы правильно меня поняли но вопрос в том как задать это условие что в скобочках писать?)
Зло Просветленный (39332) а, если буква - то исключение? можешь тупо вместо int считывать char и проверять, что он не равен '0', '1', .. в принципе, в зависимости ои того, какие библиотеки есть, можно найти готовые решения типа IsDigit(ch)
Похожие вопросы