C语言中指针与整数之间的比较

时间:2018-08-05 07:28:49

标签: c pointers stack

我要编程的是让用户输入一系列括号/花括号并评估它们是否正确嵌套。

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

#define STACK_SIZE 100

char contents[STACK_SIZE];
int top = 0;

void make_empty(void)
{
    top = 0;
}

    bool is_empty(void)
{
    return top == 0;
}

bool is_full(void)
{
    return top == STACK_SIZE;
}

void push(char i)
{
    if(is_full())
        stack_overflow();
    else
        contents[top++] = i;
}

char pop(void)
{
    if(is_empty())
        stack_underflow();
    else
        return contents[--top]; 
}

void stack_overflow(void)
{
  printf("Stack overflow\n");
  exit(EXIT_FAILURE);
}

void stack_underflow(void)
{
  printf("Stack underflow\n");
  exit(EXIT_FAILURE);
}

int main(void)
{
    char ch;
    printf("Enter parentheses and/or braces: ");
    while((ch = getchar()) != '\n')
    {   
        if(ch == '(' || ch == '{')
            push(ch);
        else if(ch == ')')
            {
                if(pop != '(') /// compiler says it is a comparison between pointer and integer.
                {
                    printf("not nested properly!");
                    exit(EXIT_FAILURE);
                }
            }
        else if(ch == '}'){
            if(pop != '{')  /// compiler says it is a comparison between pointer and integer.
            {
                printf("not nested properly!");
                exit(EXIT_FAILURE);
            }
        }
    }
    if(is_empty())
        printf("Parentheses/braces are nested properly");
    else
        printf("not nested properly!!");
    /* if the stack is empty, it is nested properly, otherwise not.*/

    return 0;
}

编译器说pop和'('或'{'之间的比较是指针和整数之间的比较,尽管我将函数'pop'的返回类型设置为int。因此,当程序用right处理时括号或花括号始终会显示“嵌套不正确。”我该如何改善呢?

1 个答案:

答案 0 :(得分:4)

这只是“提及”函数,而不是调用它。
编译器会看到函数指针,而不是返回值及其类型。

pop != '{'

使用

pop() != '{'

以便调用该函数并比较类型char'{'的返回值。