1. Правильно ли в консольном приложении для задержки экрана использовать system ("pause")?
2. Для того что-бы приложение обрабатывало исключительные ситуации вроде деления на ноль. Ставлю в Свойствах проекта у поля Code Generation (вкладка С++) свойство Enable C++ Exception -> Yes with Seh exception.
Потом соответственно ловлю через
Код:
try
{
for (i=15; i>-1;--i)
{
cout<<i<<endl;
j/=i;
}
}
catch(...)
{
cout<<"Division by 0"<<endl;
}
Т.е. это и есть механизм отлова исключительных (аномальных) ситуаций. Или можно другие настройки покрутить?
[Ответ]
Battle Coder 23:51 26.10.2012
Hopkroft, откройте что ли любую книжку по С++ (их навалом) - там и про обработку исключений есть...
[Ответ]
Hopkroft 00:07 27.10.2012
Сообщение от Battle Coder: Hopkroft, откройте что ли любую книжку по С++ (их навалом) - там и про обработку исключений есть...
Блин кэп, ну вот как ты думаешь откуда я этот код взял?
Но не во всех книжках описаны тонкости работы с конкретной средой. Например в Липпмане, просто описан механизм, без привязки к конкретной среде. Поэтому и спросил, людей которые более детально разбирались.
[Ответ]
Battle Coder 12:54 28.10.2012
Hopkroft, ну C++ знаю плоховато (начинал изучать, бросил от нехватки времени, может потом ещё вернусь). В той же java схема такая:
try {
код, который может вызывать исключение
код, который выполняется, если исключения нет (всё хорошо)
} catch (Исключение1 e) {
обработка
...
} catch (ИсключениеN e {
обработка
} finally {
что нужно вызывать ОБЯЗАТЕЛЬНО (закрыть открытые файлы, сокеты, подключения к БД и т.п.)
}
что конкретно непонятно? Думаю ,в плюсах всё если не в точности также, то очень похоже.
[Ответ]
silly 16:20 28.10.2012
Сообщение от :
Думаю ,в плюсах всё если не в точности также, то очень похоже.
В плюсах нет блока finally и много еще всяких хм… нюансов.
Сообщение от Hopkroft:
1. Правильно ли в консольном приложении для задержки экрана использовать system ("pause")?
Сообщение от Battle Coder:
что конкретно непонятно? Думаю ,в плюсах всё если не в точности также, то очень похоже.
Просто если в настройках проекта не поставишь галки, то сама среда перехватывает исключение.
Как сделать так, что-бы исключение могла обрабатывать программа, и если не смогла его обработать то передала операционке?
Просто неудобно когда работаешь с исключениями сама IDE его пытается обработать.
[Ответ]
Hopkroft 19:19 28.10.2012
Сообщение от silly:
Всем пофиг. Хотя не солидно, конечно.
Т.е. лучше делать так
Код:
char ch;
std::cin.get(&ch);
А перед этим очищать буффер ввода на всякий "пожарный"?
[Ответ]
silly 20:31 28.10.2012
Disclaimer: я в с++ тоже не соображаю.
Сообщение от Hopkroft:
Как сделать так, что-бы исключение могла обрабатывать программа, и если не смогла его обработать то передала операционке?
Тут вроде как есть альтернативный подход с использованием _set_se_translator(). Отлов сразу всех seh-исключений представляется мне опасным.
Сообщение от Hopkroft:
А перед этим очищать буффер ввода на всякий "пожарный"?
Хм… Не знаю, скорее всего нет, не очищать, раз уж реальная причина не придумывается.
[Ответ]
Hopkroft 20:47 28.10.2012
Сообщение от silly:
Disclaimer: я в с++ тоже не соображаю.
однако нагуглил несколько интересных ссылок. Спасибо, буду разбираться!
UPD. Вообщем народ очень рекомендует сконцентрироваться на проверке предварительных условий. или как уже было сказано использовать _set_se_translator().
[Ответ]
Battle Coder 09:04 05.11.2012
Сообщение от Hopkroft:
Просто если в настройках проекта не поставишь галки, то сама среда перехватывает исключение.
/0
узнаю много нового. Это особенность C++ как ЯП, или особенность среды? Или я просто неправильно понял? А что за среда-то хоть, вы не написали?
[Ответ]
Hopkroft 11:07 05.11.2012
Сообщение от Battle Coder:
/0
узнаю много нового. Это особенность C++ как ЯП, или особенность среды? Или я просто неправильно понял? А что за среда-то хоть, вы не написали?
Среда Visual Studio 2008.
Как я понял, среда брала на себя всю работу по обработке исключительных ситуаций вроде деления на 0. Как оказалось люди не рекомендуют обрабатывать самим эти исключительные ситуации и советуют проверять условия, что-бы не допустить их.
Один из моментов когда их рекомендуют обрабатывать, это если вы пользуетесь сторонней библиотекой, которая может иногда выдавать исключительные ситуации. Вот тогда их и рекомендуют перехватывать. Хотя на мой взгляд лучше использовать другую версию библиотеки или вообще другую библиотеку.
[Ответ]
silly 16:08 05.11.2012
Сообщение от Battle Coder:
/0
узнаю много нового. Это особенность C++ как ЯП, или особенность среды? Или я просто неправильно понял? А что за среда-то хоть, вы не написали?
В visual studio два вида исключений: из стандарта c++ и «от майкрософта» (structured exceptions).
[Ответ]
Shoroh 20:54 27.11.2012
1. я юзал getch(), если праваильно понял-ждет нажатия любой клавиши.
2. можешь сам проверять что бы то на что ты делишь было не ноль, и гененирь исключение(если нужно) или чего то там вызывать...
типа
if(i ==0){
\\тут обработка если И=нулю
}
[Ответ]
Hopkroft 21:12 27.11.2012
Сообщение от Shoroh:
1. я юзал getch(), если праваильно понял-ждет нажатия любой клавиши.
Аналогично, но хотел узнать альтернативу.
Сообщение от Shoroh:
2. можешь сам проверять что бы то на что ты делишь было не ноль, и гененирь исключение(если нужно) или чего то там вызывать...
типа
if(i ==0){
\\тут обработка если И=нулю
}
Это идеальный вариант. А что по поводу ситуации когда юзешь библиотеку, одна из функций которой вываливает исключительную ситуацию, исходников нету, вместо этого dll файл.
[Ответ]
RedName 09:18 28.11.2012
В этих ваших плюсах try - catch нет чтоле?
[Ответ]
Shoroh 10:31 28.11.2012
эту функцию в трай блок значит. с соот-й обработкой того самого исключения.
[Ответ]