Как выполнить операцию просмотра в стеке массива в C?

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)» в операции просмотра.

if (x != -1) - x - это массив символов, а не целое число. Вы должны компилировать со всеми включенными предупреждениями, и компилятор будет жаловаться на это.
John3136 20.11.2022 04:14

Компилятор выдает ряд предупреждений, указывающих места, где в вашем коде есть серьезные проблемы. Исправление этого было бы хорошим началом.

Avi Berger 20.11.2022 04:29

Как исправить сравнение предупреждения между указателем и целым числом"??

anna 20.11.2022 04:46

В настоящее время многие предупреждения игнорируются. В итоге они привели к нежелательному результату. Вы должны взять хорошую книгу по программированию на C и никогда не пропускать предупреждения, генерируемые компилятором.

Rohan Bari 20.11.2022 04:52
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
4
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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(), иначе вы можете иметь дело с неопределенными данными.

Другие вопросы по теме