Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
VFJB
1 / 1 / 0
Регистрация: 14.12.2008
Сообщений: 26
#1

исключения - C++

02.07.2009, 19:36. Просмотров 1685. Ответов 32
Метки нет (Все метки)

программа реализует проверку на двоичное число:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <string.h>
using namespace std;
 
//класс исключений
class error{
public:
    char str[100];
    //конструктор, который присваивает строке stri значение строки str
    error (char stri[100])
    {
        strcpy_s(str, stri);
    }
};
 
//функция, проверяющая корректногсть ввода данных
int IsBinary(char s[]){
    int count=0;//переменная-счетчик
    int points=0;//переменная-счетчик, отвечающая за количество точек
    int minuses=0;//переменная-счетчик, отвечающая за количество минусов
    int num = 0;//переменная-счетчик
    //проверка корректности ввода данных
    for (int i=0; i<(int)strlen(s); i++)
    {
        if (((int)s[i]>=48) && ((int)s[i]<=49) || ((int)s[i]==46) || ((int)s[0]==45))
        {
            //если s[0] - минус, увеличиваем счетчики
            if ((i==0)&&(int)s[i] == 45)
            {
                count++;
                minuses++;
            }
            //если s[i]-цифра, увеличиваем счетчики
            if (((int)s[i]>=48) && ((int)s[i]<=57)) 
            {
                num=num+1; 
                count = count+1;
            }
            //если s[i]-точка, увеличиваем счетчики
            if ((int)s[i] == 46) 
            {
                points=points+1;
                count = count+1;
            }
            //если s[i]-минус - исключение
            if (((int)s[i] == 45)&&(i!=0)) 
            {
                throw error("ne dvoicnoe\n");
                exit(0);
            }
        }
        else 
        {
            break;
        }
    }   
    //если нет цифр-исключение
    if ((num==0)&&((points=1)||(minuses=1))) 
    {
        throw error("ne dvoichnoe\n");
    }
    else
    //если есть лишние символы - исключение
    if ((strlen(s)!=num+points+minuses)||(points>1)||(minuses>1)) 
    {
        throw error("ne dvoichnoe\n");
    }
    else 
    {
        cout << "dvoichnoe" << endl;
    }
}
 
//главная функция программы
int main()
{
    //вывод на экран назначения программы
    cout << "programma opredeliaet dvoicnie chisla" << endl;
    char s[100];//
    cout << "vvedite chislo" << endl;//запрос на ввод пользователем некой строки
    cin >> s;
    //вызов функции проверки числа
    try 
    {
        IsBinary(s);
    }
    //перехватчик исключений
    catch(error ex)
    {
        cerr << ex.str;
    }
    return 0;
}
нужно задать тип исключения, не подскажите как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2009, 19:36     исключения
Посмотрите здесь:

Исключения - C++
Как бросить исключение выхода за границы массива? Как его поймать? Что делать после отбрасывания? TItem &amp; TArray::operator (unsigned...

Исключения - C++
читаю про исключения, сама концепция понятна, но стоит ли вообще заострять на исключениях своё внимание? например описан класс exception,...

Исключения - C++
Никак не могу понять, как работают исключения в С++. Может быть кто-нибудь сможет объяснить на примере деления на 0. Исключения должны быть...

Исключения - C++
Привет всем. Помогите плиз с задачкой, никак не могу решить, нужно из кода ниже сделать классы производными от logic_error, определенного в...

Исключения - C++
Упражняюсь в программировании. Написал абстрактный класс Shape, от которого наследуются Quadr и Treyg. Создал класс исключения Exeption,...

исключения - C++
пожалуйста, gомогите решить задачу на с++ , кoтoрая пoкaзывaет, чтo функция co cвoим блoкoм try не дoлжна пeрeхватывaть кaждую вoзмoжную...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 19:48     исключения #2
http://insidecpp.ru/art/15/
VFJB
1 / 1 / 0
Регистрация: 14.12.2008
Сообщений: 26
02.07.2009, 20:03  [ТС]     исключения #3
Vourhey,

хм.. а в моем случае это как выглядеть будет? напишите, если не сложно
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 20:20     исключения #4
Под типом, как я понимаю, имеется ввиду родитель твоего класса? Унаследуй его от кого-нибудь соответствующего здесь:
http://www.aoc.nrao.edu/~tjuerges/AL...exception.html
иерархия классов исключений стандартной библиотеки. Или от std::exception его сделай. Вот пример:
http://habrahabr.ru/blogs/cpp/60666/
Evg
Эксперт CАвтор FAQ
17469 / 5707 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 26
02.07.2009, 20:32     исключения #5
49-ю строку надо удалить
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 20:40     исключения #6
Цитата Сообщение от Evg Посмотреть сообщение
49-ю строку надо удалить
"можно" удалить )) но вопрос не в этом
VFJB
1 / 1 / 0
Регистрация: 14.12.2008
Сообщений: 26
02.07.2009, 20:52  [ТС]     исключения #7
C++
1
2
3
4
5
6
7
8
9
10
11
class error:public std::runtime_error
{
    private std::string str;
public:
    char str[100];
    //конструктор, который присваивает строке stri значение строки str
    error (char stri[100])
    {
        strcpy_s(str, stri);
    }
};
так? или я не правильно делаю?
Evg
Эксперт CАвтор FAQ
17469 / 5707 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 26
02.07.2009, 21:03     исключения #8
А можете в двух словах пояснить, что в исходном коде не так? Просто я в плюсах не особо.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 21:11     исключения #9
делай от exception обычного ))
ловить, соответственно будет тоже тип exception.
Не забудь релизовать what().

Добавлено через 6 минут 5 секунд
Цитата Сообщение от Evg Посмотреть сообщение
А можете в двух словах пояснить, что в исходном коде не так? Просто я в плюсах не особо.
С кодом все нормально синтаксически. Я вот только понять не могу, что под типом имеется ввиду.
Evg
Эксперт CАвтор FAQ
17469 / 5707 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 26
02.07.2009, 21:11     исключения #10
А чем кидание объекта описанного класса error принципиально отличается от кидания объекта класса, пронаследованного от std::exception
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 21:12     исключения #11
Evg, как считаешь, что имели ввиду
под нужно задать тип исключения, не подскажите как это сделать?
есть идеи еще, кроме вышенаписанной?
Evg
Эксперт CАвтор FAQ
17469 / 5707 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 26
02.07.2009, 21:13     исключения #12
Цитата Сообщение от Vourhey Посмотреть сообщение
С кодом все нормально синтаксически
Да я не про синтаксис, а про концепцию

Цитата Сообщение от Vourhey Посмотреть сообщение
Я вот только понять не могу, что под типом имеется ввиду.
А... ну всё-таки так. А то я думал, что один я такой тупой и не могу понять, что же тут надо

Добавлено через 54 секунды
Цитата Сообщение от Vourhey Посмотреть сообщение
есть идеи еще, кроме вышенаписанной?
Идеи по поводу реализации или по поводу того, чтобы это могло значить? Хотя идей нет ни тех ни других
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 21:13     исключения #13
Цитата Сообщение от Evg Посмотреть сообщение
А чем кидание объекта описанного класса error принципиально отличается от кидания объекта класса, пронаследованного от std::exception
тем, что я могу его отловить вот этим:
catch(exception . . .
Так как, эксепшн это базовый класс. Плюс, конечно, наш класс исключения унаследует члены класса от папочки. А мы переопределим, что нам нужно в нашем дочернем классе
Evg
Эксперт CАвтор FAQ
17469 / 5707 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 26
02.07.2009, 21:16     исключения #14
Цитата Сообщение от Vourhey Посмотреть сообщение
Так как, эксепшн это базовый класс
Для обработчика исключения совершенно до фонаря, это класс или вообще объект типа int. Скажем так, с языком я знаком, но на нём практически ничего не писал, а потому практического опыта программирования не имею. Собственно потому у меня и возник первоначальный вопрос. Ну в общем, пока товарищ не пояснит суть вопроса, можно только гадать, чего же он хочет
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 21:18     исключения #15
Например, в базовом классе эксепшн, есть стандартная для всех классов исключений функция what(), которая определена во всех наследниках. Соответственно в вышеприведенном коде у нас она не реализована, и даже не объявлена. А вот после наследования от exception она унаследуется, правда не переопределенная пока нами.

Добавлено через 1 минуту 44 секунды
Evg, я в курсе, что до фонаря. Я могу и так поймать:
catch(int . . .
Но мне в голову ничего больше о типах не приходит, кроме этого. Предлагай, если есть что-то лучше )
Evg
Эксперт CАвтор FAQ
17469 / 5707 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 26
02.07.2009, 21:19     исключения #16
А что делает этот метод? И, собственно, на кой он нам нужен в данном случае, если здесь кроме факта случившегося исключения больше ничего и не нужно? Т.е. вообще достаточно кинуть неинициализированный объект нашего класса error
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 21:19     исключения #17
Evg, но мое исключени через int ты поймать не сможешь, так как они не связаны. Так что, ты не совсем прав.
Evg
Эксперт CАвтор FAQ
17469 / 5707 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 26
02.07.2009, 21:20     исключения #18
Цитата Сообщение от Vourhey Посмотреть сообщение
Но мне в голову ничего больше о типах не приходит, кроме этого. Предлагай, если есть что-то лучше )
Я ж говорю, я проблему-то не пойму, а потому и предложить ничего не могу
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 21:20     исключения #19
Evg, блин, если это код рассматривать, то тут вообще исключения не нужны полноценные
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2009, 21:21     исключения
Еще ссылки по теме:

Исключения С++ - C++
С++. Перечитал уже много учебников, видел много примеров, но никак не пойму как пользоваться блоками try catch.. Может хоть кто-нибудь...

исключения - C++
скажите пожалуйстокак написать через исключение if(n&lt;=0 || n&gt;=100000000) { fclose(f); f=fopen(&quot;output.txt&quot;, &quot;w&quot;); ...

Исключения - C++
Помогите пожалуйста!!! Написал два исключения, но выводит что-то неправильно. Помогите найти ошибки!!! Задание: для функции:...

Исключения - C++
Всем доброго времени суток! В универе дошли до темы &quot;Обработка исключительных ситуаций&quot; и возник вопрос, где в реальных приложениях...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17469 / 5707 / 362
Регистрация: 30.03.2009
Сообщений: 15,663
Записей в блоге: 26
02.07.2009, 21:21     исключения #20
Цитата Сообщение от Vourhey Посмотреть сообщение
Evg, блин, если это код рассматривать, то тут вообще исключения не нужны
Ну это понятно. Просто я так понимаю, большинство сказанного тобой в первую очередь относилось к общему случаю, а не к конкретно данному примеру?
Yandex
Объявления
02.07.2009, 21:21     исключения
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru