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

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

Войти
Регистрация
Восстановить пароль
 
каддафи
3 / 3 / 1
Регистрация: 02.10.2012
Сообщений: 112
#1

Добавить выброс исключении - C++

15.06.2014, 12:02. Просмотров 397. Ответов 11
Метки нет (Все метки)

Запутался с этими исключениями. Может кто нить добавит мне в код 3 исключения. В случае если массив пустой и производится функция запроса последнего элемента. В случае если производится функция удаления элемента, а массив пустой. И если превышено максимальное количество элементов. Я там условия сделал, но вместо них надо исключения сделать.

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
94
95
#include <iostream>
#include <stack>
#include<cstdlib>
using namespace std;
 const int maxsize = 5;
 class Stack
{
public:
    int var;//znacheniya elementov
    int count;//schetchik
    int max_stack[maxsize];//massiv
    Stack(); // konstruktor
 
    void push();//dobavlenie elementov
    void pop();//udalenie poslednego elementa
    int top();// vivod poslednego elementa
    
    
};
Stack::Stack()
{
    count = 0; 
    var = 0; 
}
 
void Stack::push()
{
if (count==maxsize)
{cout<<"Stek POLNII!!"<<endl;}
else
        max_stack[count++] = var; // dobavlenie v stek
        
        
}
void Stack::pop()
{
    if (count > 0)
     max_stack[--count]; // Udalit iz steka
}
     
int Stack:: top()
     {
         
         if (count>0)
         
         {return max_stack[2];  // vivesti poslednii element
        
         
         }
         else
         return -1;
         }
int main()
{
    
    
int k=0;
Stack d; 
while (k!=4)
{
      
cout<<"-----------------------------"<<endl;
cout<<"Dobavit element           -1-"<<endl;
cout<<"Udalit poslednii element  -2-"<<endl;
cout<<"Vivesti poslednii element -3-"<<endl;
cout<<"Vihod iz programmi        -4-"<<endl;
cout<<"-----------------------------"<<endl;
cout<<"Vvedite komandu:";
cin>>k;
system("CLS");
if (k==1)
{
    cout << "VVedite elementi steka:" << endl;
    cin >> d.var;
    d.push();
}
if (k==2)
{
         
    d.pop();
    cout<<" - UDALENO!!" << endl; // Udalenie poslednego elementa.
}       
if (k==3)
{
        
    cout <<"Poslednii element: "<< d.top() << endl; // Vivod poslednego elementa
    
 
}       
}
        system ("pause");
 
 
    return 0;
}
Добавлено через 26 минут
Или добавьте хотя бы одно исключение. Чтоб я понял как на примере моей программы это будет выглядеть, а я остальное сам доделаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2014, 12:02     Добавить выброс исключении
Посмотрите здесь:

Выброс числа во время цикла - C++
Такая вот программка - человек вводит первое число(от) и второе (до) куда якобы искать. при нахождение его cout выводит инфу. выводит...

Выброс static_assert в failure SFINAE - C++
Добрый день, Пролог: куда я только static_assert не пихал))) Проблема: Ошибка error C2794: 'type': is not a member of any...

что произойдет при исключении переопределения функции из класса - C++
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу...

1C 7.x Выброс пользователя - 1С
Привет всем. ситуация: под одним виндовс-пользователем запускается 2-3 копии 1с, каждая копия под своим пользователем...

Несанкционированный выброс из цикла - VBA
Здравствуйте, нужна помощь знающих! Есть программа, код: Sub CmbProg_Click() For i = 0 To 6 If CmbProg.Text = CmbProg.List(i)...

Выброс точек с прореживанием - Алгоритмы
Здравствуйте Есть генератор последовательно выбрасывающий точки (x, y, z) в пр-ве. Требуется всего-навсего выкидывать точку если...

Ошибка в исключении - C#
Здраствуйте, посмотрите код, там, где исключение ошибка.Я его туда вставил хоть?)) using System; using System.Collections.Generic; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.06.2014, 12:06     Добавить выброс исключении #2
C++
1
2
3
4
5
6
7
void Stack::pop()
{
    if (count > 0)
        max_stack[--count]; // Udalit iz steka
    else 
        throw std::logic_error("empty stack");
}
каддафи
3 / 3 / 1
Регистрация: 02.10.2012
Сообщений: 112
15.06.2014, 12:40  [ТС]     Добавить выброс исключении #3
Tulosba, Спасибо, но не совсем понятно без try и catch.

Добавлено через 29 минут
Вот так сделал, но там ошибки logic_error is not member of std, logic_error has not declareted, invalid catch parametr.

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <stack>
#include<cstdlib>
using namespace std;
 const int maxsize = 20;
 class Stack
{
public:
    int var;//znacheniya elementov
    int count;//schetchik
    int max_stack[maxsize];//massiv
    Stack(); // konstruktor
 
    void push(int);//dobavlenie elementov
    void pop();//udalenie poslednego elementa
    int top();// vivod poslednego elementa
    ~Stack(void);
    
    
};
Stack::Stack(void)
{
    count = 0; 
    var = 0; 
}
Stack::~Stack()
{
               delete[] max_stack;
               
               }
 
void Stack::push(int var)
{
if (count==maxsize)
{cout<<"Stek POLNII!!"<<endl;}
else
        max_stack[count++] = var; // dobavlenie v stek
        
        
}
void Stack::pop()
{
    if (count > 0)
    {
     max_stack[--count]; // Udalit iz steka
     cout<<" - UDALENO!!" << endl; // Udalenie poslednego elementa.
  }
  
 else throw std::logic_error("empty stack");
}
     
int Stack:: top()
     {
         
         if (count>0)
         
         {return max_stack[count-1];  // vivesti poslednii element
        
         
         }
         else
         return -1;
         }
int main()
{
    
    
int k=0;
Stack d; 
while (k!=4)
{
      try
      {
cout<<"-----------------------------"<<endl;
cout<<"Dobavit element           -1-"<<endl;
cout<<"Udalit poslednii element  -2-"<<endl;
cout<<"Vivesti poslednii element -3-"<<endl;
cout<<"Vihod iz programmi        -4-"<<endl;
cout<<"-----------------------------"<<endl;
cout<<"Vvedite komandu:";
cin>>k;
system("CLS");
if (k==1)
{
         int x;
    cout << "VVedite elementi steka:" << endl;
    cin >>x;
    d.push(x);
}
if (k==2)
{
         
    d.pop();
    
}       
if (k==3)
{
        
    cout <<"Poslednii element: "<< d.top() << endl; // Vivod poslednego elementa
    
 
} 
}   
  catch (logic_error)
{
      cout<< "Massiv pustoi"<<endl;
}       
}
 
        system ("pause");
 
 
    return 0;
}
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.06.2014, 12:56     Добавить выброс исключении #4
C++
1
#include <stdexcept>
SatanaXIII
Супер-модератор
Эксперт С++
5594 / 2628 / 240
Регистрация: 01.11.2011
Сообщений: 6,474
Завершенные тесты: 1
15.06.2014, 13:38     Добавить выброс исключении #5
каддафи,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    try
        {
        if( count > 0 )
            max_stack[--count]; // Udalit iz steka
        else
            throw std::logic_error("empty stack");
            //throw std::string( "empty" );
        }
    catch( logic_error log_err)
        {
            cout << log_err.what();
        }
    //catch( std::string err_text )
    //  {
    //  std::cout << err_text.c_str();
    //    }
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.06.2014, 13:53     Добавить выброс исключении #6
SatanaXIII, ловить исключение следует по ссылке.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.06.2014, 16:20     Добавить выброс исключении #7
Цитата Сообщение от SatanaXIII Посмотреть сообщение
каддафи,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    try
        {
        if( count > 0 )
            max_stack[--count]; // Udalit iz steka
        else
            throw std::logic_error("empty stack");
            //throw std::string( "empty" );
        }
    catch( logic_error log_err)
        {
            cout << log_err.what();
        }
    //catch( std::string err_text )
    //  {
    //  std::cout << err_text.c_str();
    //    }
Он же так и вставит прямо в метод трай кетч =)
каддафи
3 / 3 / 1
Регистрация: 02.10.2012
Сообщений: 112
15.06.2014, 16:43  [ТС]     Добавить выброс исключении #8
А если я буду просто писать throw 100 например там где ошибка или throw 150 . А потом
C++
1
2
3
4
5
6
7
8
catch (int i)
{ 
 
if (i==100)
показать то то
if (i==150)
показать то то
}
Это будет считаться грамотным? И будет считаться что я использовал исключения?
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.06.2014, 16:51     Добавить выброс исключении #9
каддафи, грамотное решение предполагает использование класса для объекта исключения. Пользовательского или стандартного. Но уж точно не базовых типов как int. Несмотря на то, что это работает.
каддафи
3 / 3 / 1
Регистрация: 02.10.2012
Сообщений: 112
15.06.2014, 16:59  [ТС]     Добавить выброс исключении #10
Tulosba, У меня просто время поджимает, нужно сегодня уже сдать. Точнее сдал уже. В вашем варианте я не понял как это работает, но работает. А второе исключение вашим методом по аналогии сделать не получилось. Пришлось тупо через int сделать.
SatanaXIII
Супер-модератор
Эксперт С++
5594 / 2628 / 240
Регистрация: 01.11.2011
Сообщений: 6,474
Завершенные тесты: 1
15.06.2014, 19:17     Добавить выброс исключении #11
Цитата Сообщение от Tulosba Посмотреть сообщение
ловить исключение следует по ссылке
C++
1
2
3
4
5
6
7
8
9
10
11
    try
        {
        if( count > 0 )
            max_stack[--count]; // Udalit iz steka
        else
            throw std::logic_error( "empty stack" );
        }
    catch( logic_error &exp )
        {
            cout << exp.what();
        }
Ня?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2014, 19:30     Добавить выброс исключении
Еще ссылки по теме:

Отключить сообщение об исключении - Delphi
Если запускать приложение прямо в делфи, то когда происходит исключение, делфи благим матом орет об этом, даже если исключение отловлено....

Перехват исключения в исключении - C#
Есть код, при перехвате исключения - исполняется некий код. Но что делать, если этот код может так же вызвать исключение до n-го кол-ва...

Поймать notice в исключении - PHP
Добрый вечер. После долгих месяцев программирования на C# немного непривычно переходить на PHP. Я столкнулся с такой проблемой, что на...

Цикл. Выброс цифр из введенного числа - Pascal ABC
Дано натуральное число n . Выбросьте из записи этого числа цифры 3 и 7, оставив бывшим расположения остальных цифр. Например, из числа...

Ужесточение ответственности за выброс мусора на улице - Политика
Важная иницатива на РОИ, голосуем. https://www.roi.ru/13710 В настоящее время наблюдается весьма низкий культурный уровень...


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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.06.2014, 19:30     Добавить выброс исключении #12
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ня?
К словам Nekto тоже стоит прислушаться И std:: отклеился.
Yandex
Объявления
15.06.2014, 19:30     Добавить выброс исключении
Ответ Создать тему
Опции темы

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