Старый 26.10.2012, 22:25   #1   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
C++ вопросик

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;
  }
Т.е. это и есть механизм отлова исключительных (аномальных) ситуаций. Или можно другие настройки покрутить?
  Ответить с цитированием
Старый 26.10.2012, 23:51   #2   
Форумец
 
Сообщений: 286
Регистрация: 17.09.2010

Battle Coder вне форума Не в сети
Hopkroft, откройте что ли любую книжку по С++ (их навалом) - там и про обработку исключений есть...
  Ответить с цитированием
Старый 27.10.2012, 00:07   #3   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Battle Coder Посмотреть сообщение
Hopkroft, откройте что ли любую книжку по С++ (их навалом) - там и про обработку исключений есть...
Блин кэп, ну вот как ты думаешь откуда я этот код взял?
Но не во всех книжках описаны тонкости работы с конкретной средой. Например в Липпмане, просто описан механизм, без привязки к конкретной среде. Поэтому и спросил, людей которые более детально разбирались.
  Ответить с цитированием
Старый 28.10.2012, 12:54   #4   
Форумец
 
Сообщений: 286
Регистрация: 17.09.2010

Battle Coder вне форума Не в сети
Hopkroft, ну C++ знаю плоховато (начинал изучать, бросил от нехватки времени, может потом ещё вернусь). В той же java схема такая:
try {
код, который может вызывать исключение
код, который выполняется, если исключения нет (всё хорошо)
} catch (Исключение1 e) {
обработка
...
} catch (ИсключениеN e {
обработка
} finally {
что нужно вызывать ОБЯЗАТЕЛЬНО (закрыть открытые файлы, сокеты, подключения к БД и т.п.)
}

что конкретно непонятно? Думаю ,в плюсах всё если не в точности также, то очень похоже.
  Ответить с цитированием
Старый 28.10.2012, 16:20   #5   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Цитата:
Думаю ,в плюсах всё если не в точности также, то очень похоже.
В плюсах нет блока finally и много еще всяких хм… нюансов.

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
1. Правильно ли в консольном приложении для задержки экрана использовать system ("pause")?
Всем пофиг. Хотя не солидно, конечно.
  Ответить с цитированием
Старый 28.10.2012, 19:16   #6   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Battle Coder Посмотреть сообщение
что конкретно непонятно? Думаю ,в плюсах всё если не в точности также, то очень похоже.
Просто если в настройках проекта не поставишь галки, то сама среда перехватывает исключение.
Как сделать так, что-бы исключение могла обрабатывать программа, и если не смогла его обработать то передала операционке?
Просто неудобно когда работаешь с исключениями сама IDE его пытается обработать.
  Ответить с цитированием
Старый 28.10.2012, 19:19   #7   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от silly Посмотреть сообщение
Всем пофиг. Хотя не солидно, конечно.
Т.е. лучше делать так
Код:
char ch;
std::cin.get(&ch);
А перед этим очищать буффер ввода на всякий "пожарный"?
  Ответить с цитированием
Старый 28.10.2012, 20:31   #8   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Disclaimer: я в с++ тоже не соображаю.

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Как сделать так, что-бы исключение могла обрабатывать программа, и если не смогла его обработать то передала операционке?
Тут вроде как есть альтернативный подход с использованием _set_se_translator(). Отлов сразу всех seh-исключений представляется мне опасным.

http://stackoverflow.com/questions/4...r-c-exceptions

http://stackoverflow.com/questions/1...-studio-2008-c

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
А перед этим очищать буффер ввода на всякий "пожарный"?
Хм… Не знаю, скорее всего нет, не очищать, раз уж реальная причина не придумывается.
  Ответить с цитированием
Старый 28.10.2012, 20:47   #9   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от silly Посмотреть сообщение
Disclaimer: я в с++ тоже не соображаю.
однако нагуглил несколько интересных ссылок. Спасибо, буду разбираться!
UPD. Вообщем народ очень рекомендует сконцентрироваться на проверке предварительных условий. или как уже было сказано использовать _set_se_translator().

Последний раз редактировалось Hopkroft; 28.10.2012 в 23:16.
  Ответить с цитированием
Старый 05.11.2012, 09:04   #10   
Форумец
 
Сообщений: 286
Регистрация: 17.09.2010

Battle Coder вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Просто если в настройках проекта не поставишь галки, то сама среда перехватывает исключение.
/0
узнаю много нового. Это особенность C++ как ЯП, или особенность среды? Или я просто неправильно понял? А что за среда-то хоть, вы не написали?
  Ответить с цитированием
Старый 05.11.2012, 11:07   #11   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Battle Coder Посмотреть сообщение
/0
узнаю много нового. Это особенность C++ как ЯП, или особенность среды? Или я просто неправильно понял? А что за среда-то хоть, вы не написали?
Среда Visual Studio 2008.
Как я понял, среда брала на себя всю работу по обработке исключительных ситуаций вроде деления на 0. Как оказалось люди не рекомендуют обрабатывать самим эти исключительные ситуации и советуют проверять условия, что-бы не допустить их.
Один из моментов когда их рекомендуют обрабатывать, это если вы пользуетесь сторонней библиотекой, которая может иногда выдавать исключительные ситуации. Вот тогда их и рекомендуют перехватывать. Хотя на мой взгляд лучше использовать другую версию библиотеки или вообще другую библиотеку.
  Ответить с цитированием
Старый 05.11.2012, 16:08   #12   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Цитата:
Сообщение от Battle Coder Посмотреть сообщение
/0
узнаю много нового. Это особенность C++ как ЯП, или особенность среды? Или я просто неправильно понял? А что за среда-то хоть, вы не написали?
В visual studio два вида исключений: из стандарта c++ и «от майкрософта» (structured exceptions).
  Ответить с цитированием
Старый 27.11.2012, 20:54   #13   
Наркоман...
 
Аватар для Shoroh
 
Сообщений: 1,858
Регистрация: 20.06.2005
Возраст: 36

Shoroh вне форума Не в сети
1. я юзал getch(), если праваильно понял-ждет нажатия любой клавиши.
2. можешь сам проверять что бы то на что ты делишь было не ноль, и гененирь исключение(если нужно) или чего то там вызывать...
типа
if(i ==0){
\\тут обработка если И=нулю
}
  Ответить с цитированием
Старый 27.11.2012, 21:12   #14   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Shoroh Посмотреть сообщение
1. я юзал getch(), если праваильно понял-ждет нажатия любой клавиши.
Аналогично, но хотел узнать альтернативу.

Цитата:
Сообщение от Shoroh Посмотреть сообщение
2. можешь сам проверять что бы то на что ты делишь было не ноль, и гененирь исключение(если нужно) или чего то там вызывать...
типа
if(i ==0){
\\тут обработка если И=нулю
}
Это идеальный вариант. А что по поводу ситуации когда юзешь библиотеку, одна из функций которой вываливает исключительную ситуацию, исходников нету, вместо этого dll файл.
  Ответить с цитированием
Старый 28.11.2012, 09:18   #15   
Смотри сюда
 
Аватар для RedName
 
Сообщений: 418
Регистрация: 16.11.2007

RedName вне форума Не в сети
В этих ваших плюсах try - catch нет чтоле?
  Ответить с цитированием
Старый 28.11.2012, 10:31   #16   
Наркоман...
 
Аватар для Shoroh
 
Сообщений: 1,858
Регистрация: 20.06.2005
Возраст: 36

Shoroh вне форума Не в сети
эту функцию в трай блок значит. с соот-й обработкой того самого исключения.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind