Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2017, 17:57   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Неправильный формат вывода массива С++

Добрый день. Пишу программу, которая реализует стек на основе статического массива. При вызове метода printStack() почему-то выводит левые числа. Подскажите пожалуйста,в чем ошибка.
И еще прерывает работу программы при вызове метода bool Stack<T>:: p op(), тоже не понимаю почему. Спасибо

Код:
template <typename T>
class Stack
{
private:
  
    int size; // размер стека
	  T *stackPtr[5]; // указатель на стек
    T top; // вершина стека
public:
    Stack(int = 5);// по умолчанию размер стека равен 10 элементам
   ~Stack(); // деструктор
    bool push(const T  ); // поместить элемент в стек
    bool pop(); // удалить из стека элемент
    void printStack();
};
 
int main()
{
    Stack <int> myStack(5);
 
    // заполняем стек
    cout << "Enter: ";
    int ct = 0;
    while (ct++ != 5)
    {
        int temp;
        cin >> temp;
        myStack.push(temp);
    }
 
    myStack.printStack(); // вывод стека на экран
 
    cout << "\nDelete:\n";
 
  /*  myStack.pop(); // удаляем элемент из стека
    myStack.pop(); // удаляем элемент из стека
    myStack.printStack(); // вывод стека на экран
 */
    return 0;
}
 
// конструктор
template <typename T>
Stack<T>::Stack(int s)
{
    size = s > 0 ? s: 5;   // инициализировать размер стека
    //stackPtr = new T[size]; // выделить память под стек
    top = -1; // значение -1 говорит о том, что стек пуст
}
 
// деструктор
template <typename T>
Stack<T>::~Stack()
{
  //  delete [] stackPtr; // удаляем стек
}
 
// элемент функция класса  Stack для помещения элемента в стек
// возвращаемое значение - true, операция успешно завершена
//                                    false, элемент в стек не добавлен
template <typename T>
bool Stack<T>::push( T value)
{
    if (top == size - 1)
        return false; // стек полон
 
	
    top++;
    stackPtr[top] = &value; // помещаем элемент в стек
  cout << "|" << setw(4) << *stackPtr[top] << endl;
    return true; // успешное выполнение операции
}
 
// элемент функция класса  Stack для удаления элемента из стек
// возвращаемое значение - true, операция успешно завершена
//                                    false, стек пуст
template <typename T>
bool Stack<T>::pop()
{
    if (top == - 1)
        return false; // стек пуст
 
    stackPtr[top] =0; // удаляем элемент из стека
    top--;
 
    return true; // успешное выполнение операции
}
 
// вывод стека на экран
template <typename T>
void Stack<T>::printStack()
{
    for (int ix = size -1; ix >= 0; ix--)
        cout << "|\t"  << *stackPtr[ix] << endl;
}
Вероника99 вне форума Ответить с цитированием
Старый 18.04.2017, 18:43   #2
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Код:
template <typename T>
bool Stack<T>::push( T value)
{
    //...
    stackPtr[top] = &value; // помещаем адрес параметра в стек
    //...
}//при выходе параметр уничтожился, адрес чего теперь в stackPtr[top]?
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формат вывода (Си) zaira001002 Помощь студентам 4 14.09.2015 10:52
Неправильный формат данных полей развертывания из сводной таблицы. Dima_com Microsoft Office Excel 2 18.02.2015 14:57
Формат вывода Паркер Помощь студентам 1 06.12.2011 11:03
Формат вывода и сложение массива OpenId Общие вопросы C/C++ 2 08.12.2010 18:53
Формат вывода спецификатора E (e) Valter Общие вопросы C/C++ 0 13.11.2010 13:35