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

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

Войти
Регистрация
Восстановить пароль
 
mirag0505
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 17
#1

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

14.03.2014, 01:09. Просмотров 305. Ответов 3
Метки нет (Все метки)

Здравствуйте, есть код со стеком, вопрос касательно метода класса,а точнее о выводе элемента из стека - 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; // выводим последний элемент.
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2014, 01:09     Стек на массиве (выводит значение даже при пустом стеке)
Посмотрите здесь:

Стек содержит целые числа, удвоить вхождение нуля в стеке C++
C++ при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"?
наименьшее значение в массиве поменять с последним элементом в массиве C++
C++ Стек на массиве
C++ Вычислить значение выражения, используя стек операндов
C++ Пронумерировать стек. Ошыбка в стеке
Стек на саморасширяющемся массиве C++
C++ Вычислить значение выражения используя стек
C++ Стек, не выводит последний элемент
C++ Программа всегда выводит одно и тоже значение при разных вводимых данных
C++ Стек на массиве
Реализовать стек на массиве с использованием двунаправленного списка C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 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
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 3
17.03.2014, 22:27     Стек на массиве (выводит значение даже при пустом стеке) #4
Ну если вы не знакомы с исключениями в С++, то в двух словах это не объяснить. Погуглите тему "Исключения С++".
Yandex
Объявления
17.03.2014, 22:27     Стек на массиве (выводит значение даже при пустом стеке)
Ответ Создать тему
Опции темы

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