Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463

Неправильный формат вывода массива С++

18.04.2017, 17:58. Показов 988. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Пишу программу, которая реализует стек на основе статического массива. При вызове метода printStack() почему-то выводит левые числа. Подскажите пожалуйста,в чем ошибка.
И еще прерывает работу программы при вызове метода bool Stack<T>:: p op(), тоже не понимаю почему. Спасибо
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
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;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2017, 17:58
Ответы с готовыми решениями:

Неправильный формат вывода
Bicycle Codes Den has two four-digit combination locks for protecting his bicycle from thieves. Every evening he arms the bicycle...

Волшебный мост: неправильный формат вывода
Помогите. Компилятор пишет, что неправильный формат вывода. #include &lt;iostream&gt; using namespace std; int main () { int M,R,K; int...

Программа для вычисления суммы двух неотрицательных чисел. Ошибка: неправильный формат вывода.
Написал супер элементарную программу для вычисления суммы двух неотрицательных чисел. #include &lt;stdio.h&gt; int main() { int...

3
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
18.04.2017, 18:05
Цитата Сообщение от Вероника99 Посмотреть сообщение
T *stackPtr[5]; // указатель на стек
массив из 5 указателей на T
Цитата Сообщение от Вероника99 Посмотреть сообщение
stackPtr[top] = &value; // помещаем элемент в стек
помещаем указатель на временную переменную в элемент массива stackPtr[top](возможен выход за границы при top >= 5)
0
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
18.04.2017, 18:15  [ТС]
А что тогда делать? Создать обычный массив как член класса,в него заносить значения с клавиатуры и сделать так чтобы массив указателей указывал на него? Тогда этот массив указателей теряет смысл..что Вы посоветуете?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
18.04.2017, 18:47
Цитата Сообщение от Вероника99 Посмотреть сообщение
А что тогда делать?
да почти ничего - приведенный вами код легко исправить
подправленный вариант // не проверял
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
template <typename T>
class Stack
{
private:
    int size; // размер стека
    T *stackPtr; // указатель на стек
    int top; // вершина стека
public:
    enum constants {
        DEFAULT_SIZE = 10 // по умолчанию размер стека равен 10 элементам
    };
    Stack(int);// по умолчанию размер стека равен 10 элементам
    ~Stack(); // деструктор
    T getTop(); // получить элемент на верхушке
    bool isEmpty(); // проверка на пустоту
    bool isFull(); // проверка на заполненность
    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 sz = Stack<T>::DEFAULT_SIZE):
        size(sz),
        stackPtr(new T[size]),
        top(-1)
{}
 
// деструктор
template <typename T>
Stack<T>::~Stack()
{
  delete [] stackPtr; // удаляем стек
}
 
template <typename T>
bool Stack<T>::isEmpty()
{ return top == - 1; }
 
template <typename T>
bool Stack<T>::isFull()
{ return top == size - 1; }
 
template <typename T>
T Stack<T>::getTop() {
    return stackPtr[top];
}
 
// элемент функция класса  Stack для помещения элемента в стек
// возвращаемое значение - true, операция успешно завершена
//                                    false, элемент в стек не добавлен
template <typename T>
bool Stack<T>::push(const T& value)
{
    if (isFull())
        return false; // стек полон
 
    top++;
    stackPtr[top] = value; // помещаем элемент в стек
    return true; // успешное выполнение операции
}
 
// элемент функция класса  Stack для удаления элемента из стек
// возвращаемое значение - true, операция успешно завершена
//                                    false, стек пуст
template <typename T>
bool Stack<T>::pop()
{
    if (isEmpty())
        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;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.04.2017, 18:47
Помогаю со студенческими работами здесь

Неправильный формат вывода
Решала задачу: Дана строка. Найдите в этой строке второе вхождение буквы f, и выведите индекс этого вхождения. Если буква f в данной...

Неправильный формат вывода
Здравствуйте! Есть задание: ================ Дан массив, состоящий из целых чисел. Напишите программу, которая подсчитывает...

Неправильный формат вывода
Добрый день! Задание: Напишите программу, которая заполняет массив из N элементов случайными целыми числами в диапазоне и определяет...

Неправильный порядок вывода членов массива
Всем доброго времени суток! Даю простенький тестовый пример: # *** Константы массива. *** IND_MIN = -2 IND_MAX = 10 #...

Неправильный вывод массива после вывода содержимого файла на экран
дано задание: Создать файл целых чисел. Поменять местами первую и последнюю компоненты файла. Распечатать файл до и после преобразования....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
ПЛИС
zxcha1ka_ 27.01.2026
AHDL Разработать программы для синтеза следующих устройств: 1. Параллельного регистра 4-х разрядного с синхронной загрузкой и асинхронным сбросом (обнулением); Пoмoгитe пoжaлyйстa
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru