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

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

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

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

02.07.2009, 19:36. Просмотров 1722. Ответов 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;
}
нужно задать тип исключения, не подскажите как это сделать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2009, 19:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос исключения (C++):

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

Исключения - C++
Помогите реализовать класс исключения в данном коде. Задание: Реализуемая функция должна генерировать подходящие исключения. Обработку...

Исключения - C++
Надо сделать исключение в программе. У меня есть список. Есть методы добавить в конец списка, в начало списка, удалить елемент который...

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

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

исключения - C++
Есть тестовое задание. Реализовать класс. Есть метод. * @note The function does not validate the index, if the index is out ...

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

хм.. а в моем случае это как выглядеть будет? напишите, если не сложно
0
Vourhey
Почетный модератор
6481 / 2256 / 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/
0
Evg
Эксперт CАвтор FAQ
17818 / 6028 / 388
Регистрация: 30.03.2009
Сообщений: 16,555
Записей в блоге: 26
02.07.2009, 20:32 #5
49-ю строку надо удалить
0
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 20:40 #6
Цитата Сообщение от Evg Посмотреть сообщение
49-ю строку надо удалить
"можно" удалить )) но вопрос не в этом
0
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);
    }
};
так? или я не правильно делаю?
0
Evg
Эксперт CАвтор FAQ
17818 / 6028 / 388
Регистрация: 30.03.2009
Сообщений: 16,555
Записей в блоге: 26
02.07.2009, 21:03 #8
А можете в двух словах пояснить, что в исходном коде не так? Просто я в плюсах не особо.
0
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2009, 21:11 #9
делай от exception обычного ))
ловить, соответственно будет тоже тип exception.
Не забудь релизовать what().

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

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

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

Добавлено через 1 минуту 44 секунды
Evg, я в курсе, что до фонаря. Я могу и так поймать:
catch(int . . .
Но мне в голову ничего больше о типах не приходит, кроме этого. Предлагай, если есть что-то лучше )
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2009, 21:18
Привет! Вот еще темы с ответами:

Исключения - C++
У Эккеля, во втором томе, в главе про исключения, встретил конструкцию такого вида: T&amp; operator(int i) throw(RangeError) { if(i...

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

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

Исключения - C++
можно ли возвращаться к выполнению кода после обработки исключения, например try{ func1();//обе ф-и могут вызывать исключение...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.07.2009, 21:18
Ответ Создать тему
Опции темы

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