xheirt
@xheirt
Java, Python

Не могу добиться вывода стека в консоль?

С плюсами не очень в ладах, потому не могу решить одну проблему, пытаюсь сделать меню с основными командами для стека. Функции нельзя использовать встроенные. Проблема заключается в том, что почему то не выводится содержимое стека. Прилагаю код:
#include <iostream>

using namespace std;

const int n = 10;

struct Stack																																		//размерность и указатель но голову
{
	int max[n];
	int count;
};

void create(Stack* p)
{
	p->count = 0;
}

int isEmpty(Stack* p)
{
	if (p->count == 0) return 1;
	else if (p->count == n) return -1;
	else return 0;
}

void stkPrint(Stack* p)
{
	int i;
	i = p->count;
	if (isEmpty(p) == 1) return;
	do {
		i--;
		printf("%f\n", p->max[i]);
	} while (i > 0);
}

void add(Stack* p)
{
	int value;
	cout << "enter num > "; cin >> value;
	p->max[p->count] = value;
	p->count++;
}

void del(Stack* p)
{
	p->count--;
}

void main()
{
	setlocale(LC_ALL, "rus");

	Stack s;
	create(&s);
	char num;

	do
	{
		cout << "1. add" << endl;
		cout << "2. del" << endl;
		cout << "3. вывод" << endl;
		cout << "0. exit" << endl;
		cout << "> "; cin >> num;
		switch (num)
		{
		case '1':
			if (isEmpty(&s) == -1) cout << endl << "stack is full\n\n";
			else
			{
				add(&s);
				cout << endl << "num is add\n\n";
			} break;
			//-----------------------------------------------
		case '2':
			if (isEmpty(&s) == 1) cout << endl << "isEmpty\n\n";
			else
			{
				del(&s);
				cout << endl << "num is del\n\n";
			} break;
			//-----------------------------------------------
		case '3':
			stkPrint(&s);
			cout << endl << stkPrint;
		case '0': break;
		default: cout << endl << "error\n\n";
			break;
		}
	} while (num != '0');
}

При выводе пишет: 009014B0
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
@dima20155
you don't choose c++. It chooses you
Основная ошибка:
std::cout << p->max[i] << "\n";  // instead of:
// printf("%f\n", p->max[i]);


Вот ещё пара недочетов:
Вообще правильно
int main() //instead of void main()

Также странно, что 0, 1, 2 пункты меню на английском, и только 3 на русском.

Функция isEmpty, create, del работают только со стеком, в то время как add работает ещё и с вводом-выводом, что не совсем ожидаемо, лучше вынести работу с IO из функции add, чтобы не пришлось писать ещё один add, когда захочеся пополнять стек из файла или брать данные откуда-то из сети/сокетов и т.д.. Разве что для демонстрационной программы это ок.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы