C проверить, пуст ли массив или нет - PullRequest
1 голос
/ 08 марта 2020

Я создаю стек массивов и 2 функции. Fuction pu sh для добавления чего-либо в стек и функция fuction - это просто проверка, если стек пуст, но не работает, так в чем же ошибка.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define MAX 10

struct stack
{
    int items[MAX];
    int top;
};

typedef struct stack st;

int isempty(st *s)
{
    if (s->top==-1)
    {
        printf("it's empty");
    }
    else
    {
        printf("it's not empty");
    }
}

void push(st *s)
{
    int newitem;
    printf("Enter item: ");
    scanf("%d",&newitem);
    s->top++;
    s->items[s->top]=newitem;
}

int main()
{
    st *s;
    push(s);
    isempty(s);
    return 0;
}

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Функция isempty имеет не возвращаемый тип возврата. Таким образом, он должен вернуть значение. Например,

int isempty(st *s)
{
    if (s->top==-1)
    {
        printf("it's empty");
    }
    else
    {
        printf("it's not empty");
    }

    return s->top==-1;
}

Вторая проблема заключается в том, что вы не инициализировали указатель на объект структуры

st *s;

Нет необходимости объявлять указатель. Вы можете написать

st s = { { 0 }, -1 };

и вызывать такие функции, как

push( &s );
isempty( &s );
0 голосов
/ 08 марта 2020

Вам нужна функция инициализации, чтобы инициализировать s->top.

С другой стороны, вы определили *s, но вы не выделяли память для стека, вы выделили только указатель, который указывает на неинициализированное местоположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...