Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 14.12.2008
Сообщений: 26
1

исключения

02.07.2009, 19:36. Просмотров 2345. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.07.2009, 19:36
Ответы с готовыми решениями:

исключения
Есть тестовое задание. Реализовать класс. Есть метод. * @note The function does not validate...

Исключения
Здравствуйте, у меня есть немножко глупый вопрос: есть скажем функция a() { some code } Все...

Исключения в С++
Есть 3 массива arrA, arrB, arrC. В массиве А хранятся числа типа float, в массиве В хранятся числа...

исключения
скажите пожалуйстокак написать через исключение if(n&lt;=0 || n&gt;=100000000) { fclose(f);...

32
Почетный модератор
7265 / 2542 / 256
Регистрация: 29.07.2006
Сообщений: 13,468
02.07.2009, 19:48 2
http://insidecpp.ru/art/15/
1
1 / 1 / 0
Регистрация: 14.12.2008
Сообщений: 26
02.07.2009, 20:03  [ТС] 3
Vourhey,

хм.. а в моем случае это как выглядеть будет? напишите, если не сложно
0
Почетный модератор
7265 / 2542 / 256
Регистрация: 29.07.2006
Сообщений: 13,468
02.07.2009, 20:20 4
Под типом, как я понимаю, имеется ввиду родитель твоего класса? Унаследуй его от кого-нибудь соответствующего здесь:
http://www.aoc.nrao.edu/~tjuer... ption.html
иерархия классов исключений стандартной библиотеки. Или от std::exception его сделай. Вот пример:
http://habrahabr.ru/blogs/cpp/60666/
0
Evg
Эксперт CАвтор FAQ
21118 / 8134 / 628
Регистрация: 30.03.2009
Сообщений: 22,449
Записей в блоге: 30
02.07.2009, 20:32 5
49-ю строку надо удалить
0
Почетный модератор
7265 / 2542 / 256
Регистрация: 29.07.2006
Сообщений: 13,468
02.07.2009, 20:40 6
Цитата Сообщение от Evg Посмотреть сообщение
49-ю строку надо удалить
"можно" удалить )) но вопрос не в этом
0
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
21118 / 8134 / 628
Регистрация: 30.03.2009
Сообщений: 22,449
Записей в блоге: 30
02.07.2009, 21:03 8
А можете в двух словах пояснить, что в исходном коде не так? Просто я в плюсах не особо.
0
Почетный модератор
7265 / 2542 / 256
Регистрация: 29.07.2006
Сообщений: 13,468
02.07.2009, 21:11 9
делай от exception обычного ))
ловить, соответственно будет тоже тип exception.
Не забудь релизовать what().

Добавлено через 6 минут 5 секунд
Цитата Сообщение от Evg Посмотреть сообщение
А можете в двух словах пояснить, что в исходном коде не так? Просто я в плюсах не особо.
С кодом все нормально синтаксически. Я вот только понять не могу, что под типом имеется ввиду.
0
Evg
Эксперт CАвтор FAQ
21118 / 8134 / 628
Регистрация: 30.03.2009
Сообщений: 22,449
Записей в блоге: 30
02.07.2009, 21:11 10
А чем кидание объекта описанного класса error принципиально отличается от кидания объекта класса, пронаследованного от std::exception
0
Почетный модератор
7265 / 2542 / 256
Регистрация: 29.07.2006
Сообщений: 13,468
02.07.2009, 21:12 11
Evg, как считаешь, что имели ввиду
под нужно задать тип исключения, не подскажите как это сделать?
есть идеи еще, кроме вышенаписанной?
0
Evg
Эксперт CАвтор FAQ
21118 / 8134 / 628
Регистрация: 30.03.2009
Сообщений: 22,449
Записей в блоге: 30
02.07.2009, 21:13 12
Цитата Сообщение от Vourhey Посмотреть сообщение
С кодом все нормально синтаксически
Да я не про синтаксис, а про концепцию

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

Добавлено через 54 секунды
Цитата Сообщение от Vourhey Посмотреть сообщение
есть идеи еще, кроме вышенаписанной?
Идеи по поводу реализации или по поводу того, чтобы это могло значить? Хотя идей нет ни тех ни других
0
Почетный модератор
7265 / 2542 / 256
Регистрация: 29.07.2006
Сообщений: 13,468
02.07.2009, 21:13 13
Цитата Сообщение от Evg Посмотреть сообщение
А чем кидание объекта описанного класса error принципиально отличается от кидания объекта класса, пронаследованного от std::exception
тем, что я могу его отловить вот этим:
catch(exception . . .
Так как, эксепшн это базовый класс. Плюс, конечно, наш класс исключения унаследует члены класса от папочки. А мы переопределим, что нам нужно в нашем дочернем классе
0
Evg
Эксперт CАвтор FAQ
21118 / 8134 / 628
Регистрация: 30.03.2009
Сообщений: 22,449
Записей в блоге: 30
02.07.2009, 21:16 14
Цитата Сообщение от Vourhey Посмотреть сообщение
Так как, эксепшн это базовый класс
Для обработчика исключения совершенно до фонаря, это класс или вообще объект типа int. Скажем так, с языком я знаком, но на нём практически ничего не писал, а потому практического опыта программирования не имею. Собственно потому у меня и возник первоначальный вопрос. Ну в общем, пока товарищ не пояснит суть вопроса, можно только гадать, чего же он хочет
0
Почетный модератор
7265 / 2542 / 256
Регистрация: 29.07.2006
Сообщений: 13,468
02.07.2009, 21:18 15
Например, в базовом классе эксепшн, есть стандартная для всех классов исключений функция what(), которая определена во всех наследниках. Соответственно в вышеприведенном коде у нас она не реализована, и даже не объявлена. А вот после наследования от exception она унаследуется, правда не переопределенная пока нами.

Добавлено через 1 минуту 44 секунды
Evg, я в курсе, что до фонаря. Я могу и так поймать:
catch(int . . .
Но мне в голову ничего больше о типах не приходит, кроме этого. Предлагай, если есть что-то лучше )
0
Evg
Эксперт CАвтор FAQ
21118 / 8134 / 628
Регистрация: 30.03.2009
Сообщений: 22,449
Записей в блоге: 30
02.07.2009, 21:19 16
А что делает этот метод? И, собственно, на кой он нам нужен в данном случае, если здесь кроме факта случившегося исключения больше ничего и не нужно? Т.е. вообще достаточно кинуть неинициализированный объект нашего класса error
0
Почетный модератор
7265 / 2542 / 256
Регистрация: 29.07.2006
Сообщений: 13,468
02.07.2009, 21:19 17
Evg, но мое исключени через int ты поймать не сможешь, так как они не связаны. Так что, ты не совсем прав.
0
Evg
Эксперт CАвтор FAQ
21118 / 8134 / 628
Регистрация: 30.03.2009
Сообщений: 22,449
Записей в блоге: 30
02.07.2009, 21:20 18
Цитата Сообщение от Vourhey Посмотреть сообщение
Но мне в голову ничего больше о типах не приходит, кроме этого. Предлагай, если есть что-то лучше )
Я ж говорю, я проблему-то не пойму, а потому и предложить ничего не могу
0
Почетный модератор
7265 / 2542 / 256
Регистрация: 29.07.2006
Сообщений: 13,468
02.07.2009, 21:20 19
Evg, блин, если это код рассматривать, то тут вообще исключения не нужны полноценные
0
Evg
Эксперт CАвтор FAQ
21118 / 8134 / 628
Регистрация: 30.03.2009
Сообщений: 22,449
Записей в блоге: 30
02.07.2009, 21:21 20
Цитата Сообщение от Vourhey Посмотреть сообщение
Evg, блин, если это код рассматривать, то тут вообще исключения не нужны
Ну это понятно. Просто я так понимаю, большинство сказанного тобой в первую очередь относилось к общему случаю, а не к конкретно данному примеру?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2009, 21:21

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Исключения
Ребят, тут такая тема. В общем нужно при вводе данных смотреть на исключения, т.е. если ввели в int...

исключения c++
Здраствуйте! Я тут приспособил код старого проекта чтобы побаловаться с исключениями. Перечитывал я...

Исключения
У Эккеля, во втором томе, в главе про исключения, встретил конструкцию такого вида: T&amp;...

Исключения
можно ли возвращаться к выполнению кода после обработки исключения, например try{...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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