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

Стек на массиве (выводит значение даже при пустом стеке) - C++

Восстановить пароль Регистрация
 
mirag0505
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 17
14.03.2014, 01:09     Стек на массиве (выводит значение даже при пустом стеке) #1
Здравствуйте, есть код со стеком, вопрос касательно метода класса,а точнее о выводе элемента из стека - pop(). Дело в том что программа выводит значения стека, даже когда он пуст,это же приводит к ошибке. Как правильно реализовать проверку на пустоту стека и изменить метод для правильной работы проги?
C++
1
2
3
4
5
int Stack::pop()
{
if (top > 0)
return max_stack[--top]; // вытаскиваем из стека
}
САм код программы:
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
#include<iostream>
using namespace std;
 
const int max_size = 15;
class Stack
{
public:
int var;//значение элементов стека
int top;//вершина стека, счетчик
int max_stack[max_size];//массив
Stack(); // конструктор класса
void push();//добавление элементов
int pop();//удаление
};
Stack::Stack()
{
top = 0; // инициализируем переменные
var = 0; // для корректной работы
}
 
void Stack::push()
{
if (top <= max_size)
max_stack[top++] = var; // заносим в стек
}
int Stack::pop()
{
if (top > 0)
return max_stack[--top]; // вытаскиваем из стека
}
void main()
{
Stack s; //создание объекта класса
cout « "Введите элементы стека" « endl;
cin » s.var;
cin » s.var;
s.push();
cout « s.pop() « endl; // выводим последний элемент.
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
14.03.2014, 11:55     Стек на массиве (выводит значение даже при пустом стеке) #2
Нужно просто отслеживать эту ситуацию и как-то сообщать о ней. Например, кидать исключение.
C++
1
2
3
4
5
6
int Stack::pop()
{
    if (top == 0)
        throw std::exception("Попытка извлечь значение из пустого стека");
    return max_stack[--top]; // вытаскиваем из стека
}
А в вызывающем коде это исключение перехватывать:
C++
1
2
3
4
5
6
try {
    cout « s.pop() « endl; // выводим последний элемент.
} catch (std::exception & ex)
{
    cout << ex.what() << endl;
}
mirag0505
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 17
17.03.2014, 21:50  [ТС]     Стек на массиве (выводит значение даже при пустом стеке) #3
Извиняюсь,вы не могли бы более подробно расписать.
Цитата Сообщение от John Prick Посмотреть сообщение
throw std::exception
что это за функция и гдее взять? и что за слово в начале строки?
Цитата Сообщение от John Prick Посмотреть сообщение
try { cout « s.pop() « endl; // выводим последний элемент. } catch (std::exception & ex) { cout << ex.what() << endl; }
и этот кусок распишите полностью
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
17.03.2014, 22:27     Стек на массиве (выводит значение даже при пустом стеке) #4
Ну если вы не знакомы с исключениями в С++, то в двух словах это не объяснить. Погуглите тему "Исключения С++".
Yandex
Объявления
17.03.2014, 22:27     Стек на массиве (выводит значение даже при пустом стеке)
Ответ Создать тему
Опции темы

Текущее время: 06:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru