Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Обработка исключений


Автор: stat007 23.1.2010, 22:00
Вообщем хочу более-менее разобраться с такой темой как: Исключительные ситуации в С++!
Написал ниже программу, но она работает не верно. По идее, как мне кажется данная программа должна словить первое введённое число типа double.. Но она этого не делает, В чём ошибка. И расскажи об этой теме более подробнее кто может. Если приведёте примеры будет вообще шикарно. 
За ранее спасибо! smile 
Код

#include<iostream>
#include<iterator>
using namespace std;
int main()
{
    cout<<"Begin! Enter numbers"<<endl;
    throw 4.4;
    int mas[20], n=0, x;
    try
    {
    while(cin>>x, x!=0 && n<20)
        mas[n++]=x;
    }
    catch(double)
    {
        cout<<"Error.."<<endl;
    }
    copy(mas,mas+n, ostream_iterator<int>(cout, " "));
    system("pause");
    return 0;
}

Автор: mes 23.1.2010, 22:07
Цитата(stat007 @  23.1.2010,  21:00 Найти цитируемый пост)
Но она этого не делает,

перенесите throw внутрь блока try

Автор: stat007 23.1.2010, 22:23
mes, 
Цитата

перенесите throw внутрь блока try

Ага, уже лучше, но всё-равно работает не так как хотелось бы, после запуска программы срабатывает catch и пишештся Error..., а хотелось бы чтобы что бы вводились целые числа с клавиатуры, и после того как ввелось бы число типа double, только тогда бы сработал этот catch..

Автор: mes 24.1.2010, 02:22
Цитата(stat007 @  23.1.2010,  21:23 Найти цитируемый пост)

Ага, уже лучше, но всё-равно работает не так как хотелось бы, после запуска программы срабатывает catch и пишештся Error..., а хотелось бы чтобы что бы вводились целые числа с клавиатуры, и после того как ввелось бы число типа double, только тогда бы сработал этот catch.. 

ну так чего от программы ожидать того, чего Вы не написали. Сделайте проверку на дабл и если таковой, то возбуждайте исключение.
Тогда в try нужно поместить ввод, а не цикл.. и если считывать будете в инт, то не узнаете был ли на самом деле дабл..

Автор: azesmcar 24.1.2010, 10:37
stat007

Удали это к чертовой бабушке, try-catch не для того предназначен. Если обрабатываешь исключительную ситуацию в том же модуле, в котором генерируешь то исключения тебе не нужны.

Автор: mes 24.1.2010, 11:48
Цитата(azesmcar @  24.1.2010,  09:37 Найти цитируемый пост)
try-catch не для того предназначен. 

Так он пока учится.. еще и не понял для чего нужны исключения.. smile Так что имхо ничего страшного в таком неправильном коде, главное что не чужой за свой выдает.. но вот этого 
Цитата(stat007 @  23.1.2010,  21:00 Найти цитируемый пост)
И расскажи об этой теме более подробнее кто может.

мало вероятно что дождется, потому что никому неохота исписывать основы, которые уже изложены тысычу раз.

автору повторю совет, прежде чем учиться программировать, научитесь читать книжки внимательно и понимать что в них написано, а также пользоваться гуглем.
потому как судя по посту Вы лишь пробежались по теме беглым взглядом... или ж в пол-уха послушали лекцию.
 smile 


Автор: azesmcar 24.1.2010, 11:52
Цитата(mes @  24.1.2010,  11:48 Найти цитируемый пост)
Так он пока учится.. еще и не понял для чего нужны исключения.. smile Так что имхо ничего страшного в таком неправильном коде, главное что не чужой за свой выдает.. но вот этого 

Ну учиться лучше сразу правильному подходу, но в общем да, ничего страшного.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)