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

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

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

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

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

Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? - C++
Есть у меня пробелы в познаниях, хотел бы их устранить. 1. Что такое стек в самом языке С++ ? 2. В какой памяти он хранится и почему...

Пронумерировать стек. Ошыбка в стеке - C++
Никак не пойму почему програма ничево не выводит на функции renumber,после while.:wall: #include &lt;stdio.h&gt; #define MAX_LEN 100 ...

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами - C++
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Стек содержит целые числа, удвоить вхождение нуля в стеке - C++
Стек содержит целые числа, удвоить вхождение нуля в стеке

Создать стек из вещественных чисел; найти максимальный элемент в стеке; организовать просмотр данных стека - C++
Создать стек из вещественных чисел. Определить максимальный элемент в стеке. Организовать просмотр данных стека.

CUDA для .NET, ошибки даже в пустом проекте - C#
Пытаюсь написать приложение с использованием CUDA. На основе http://www.thevista.ru/page13118-cudanet_dlya_netrazrabotchika_ch3 ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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;
}
1
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; }
и этот кусок распишите полностью
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
17.03.2014, 22:27 #4
Ну если вы не знакомы с исключениями в С++, то в двух словах это не объяснить. Погуглите тему "Исключения С++".
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2014, 22:27
Привет! Вот еще темы с ответами:

Что изменяется, записывается в стек и где это в стеке после команды? - Assembler
1 0000 stseg segment para stack 2 0000 10*(????) old_adress dw 16 dup(?) 3 0020 ...

Даны 5 символов в стеке, вытащить из стека символы и вставить в стек только заглавные буквы - Assembler
Даны 5 символов в стеке, вытащить из стека символы и вставить в стек только заглавные буквы. Я вот сделал не много а вот как проверить на...

Проверка правильности расстановки нескольких видов скобок. Решение на стеке. Стек построен на динамическом однонаправленном списке. - Turbo Pascal
Вот смотрите ,надо проверить если заданная строка символов правильным выражение , в которой имеються все виды скобочек ,то есть одной...

Как узнать тип объектов в пустом массиве - C#
Существует массив. Необходимо узнать тип, хранящихся в нём объектов. Если массив не пустой, то это можно сделать так: return...


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

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

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