int peek()
{
if (top == -1)
{
printf("\n \t STACK UNDERFLOW");
return -1;
}
else
{
if (x != -1)
printf("\n The top most element is %d",x);
return x[top];
}
}
Моя операция просмотра не печатает правильный вывод. Выход должен быть самым верхним элементом в массиве стека, он печатает случайные числа. Операция Peek должна печатать самый верхний элемент массива стека, введенного пользователем.
Например:
----------------------------------------
ARRAY OF STACK
----------------------------------------
[1] PUSH
[2] POP
[3] PEEK
[4] DISPLAY
[5] EXIT
----------------------------------------
Enter you Choice: 1
----------------------------------------
Enter element to add: Jennie
----------------------------------------
ARRAY OF STACK
----------------------------------------
[1] PUSH
[2] POP
[3] PEEK
[4] DISPLAY
[5] EXIT
----------------------------------------
Enter you Choice: 1
----------------------------------------
Enter element to add: Lisa
----------------------------------------
ARRAY OF STACK
----------------------------------------
[1] PUSH
[2] POP
[3] PEEK
[4] DISPLAY
[5] EXIT
----------------------------------------
Enter you Choice: 3
The top most element is 4229504
Вывод должен быть «Самый верхний элемент — Лиза». Как это исправить? Мне нужно напечатать самый верхний элемент в стеке, введенный пользователем. Я также получаю «Предупреждение о сравнении между указателем и целым числом» в качестве предупреждения в «if (x! = -1)» в операции просмотра.
Компилятор выдает ряд предупреждений, указывающих места, где в вашем коде есть серьезные проблемы. Исправление этого было бы хорошим началом.
Как исправить сравнение предупреждения между указателем и целым числом"??
В настоящее время многие предупреждения игнорируются. В итоге они привели к нежелательному результату. Вы должны взять хорошую книгу по программированию на C и никогда не пропускать предупреждения, генерируемые компилятором.
printf("\n The top most element is: ");
strcpy(x,a[top]);
printf("%s",x);
Ваш стек, a, представляет собой массив строк, а вершина — это текущая позиция:
char *peek() {
if (top == -1) {
printf("\n \t STACK UNDERFLOW");
return NULL;
}
printf("\n The top most element is %s", a[top]);
return a[top];
}
Вот пример запуска:
----------------------------------------
ARRAY OF STACK
----------------------------------------
[1] PUSH
[2] POP
[3] PEEK
[4] DISPLAY
[5] EXIT
----------------------------------------
Enter you Choice: 1
----------------------------------------
Enter element to add: test
----------------------------------------
ARRAY OF STACK
----------------------------------------
[1] PUSH
[2] POP
[3] PEEK
[4] DISPLAY
[5] EXIT
----------------------------------------
Enter you Choice: 3
The top most element is test
X кажется временной переменной, которая должна быть локальной для функций, которым она требуется. В общем, рекомендуется исключить глобальные переменные. Создайте структуру для хранения состояния стека и передайте указатель на эту структуру каждой функции. Подумайте об отделении пользовательского интерфейса от функций, которые делают что-то. В этом случае переместите printf() на main(). Это позволяет вам легко повторно использовать ваши функции. Например, pop() можно записать как char *data = peek(); if (data) top--; return data;. Проверьте возвращаемое значение из scanf(), иначе вы можете иметь дело с неопределенными данными.
if (x != -1)
- x - это массив символов, а не целое число. Вы должны компилировать со всеми включенными предупреждениями, и компилятор будет жаловаться на это.