运行结果推测数组中左括号与下一位数字占一个位置,这是怎么回事

#include
#include

struct stack
{
    int top;
    char* m;
    int maxsize;
};
typedef struct stack stack;

void inistack(stack* s, int size);
int push(stack* s, char item);
int pop(stack* s);

int main()
{
    stack* zhong = (stack*)malloc(sizeof(stack));
    char z[80];
    int n,i = 0;

    inistack(zhong, 80);
    printf("输入中缀表达式:");
    scanf_s("%s", z,80);
    
while (z[i] != '\0')
    {
        switch (z[i])
        {
        case '(':
            printf("vvv");
            push(zhong, z[i]);
            break;
        default:
            printf("%c", z[i]);
        }
        i++;
    }
    while (zhong->top != -1)
    {
        printf("%c", zhong->m[zhong->top]);
        pop(zhong);
    }
    return 0;
}
#初始化
void inistack(stack* s, int size)
{
    s->maxsize = size;
    s->m = (char*)malloc(sizeof(char) * s->maxsize);
    s->top = -1;
}
#入栈
int push(stack* s, char item)
{
    if (s->top != s->maxsize--)
    {
        s->top++;
        s->m[s->top] = item;
    }
    else
        printf("full");
    return 0;
}
#出栈
int pop(stack* s)
{
    //printf("%c", s->m[s->top]);
    s->top--;
    return 0;
}

单个输入’左括号时,左括号可以进入case ‘(’,但当输入算式(3+3)时,左括号与3一同进入了default

麻烦求解一下,需要在输入算式时,不要让左括号与数字绑定

代码没什么问题,输入算式(3+3) 时,字符间不能有空格等,没有出现题主的问题。有一处错误,在入栈函数 push()里,做修改标志,供参考:

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

struct stack
{
    int top;
    char* m;
    int maxsize;
};
typedef struct stack stack;

void inistack(stack* s, int size);
int  push(stack* s, char item);
int  pop(stack* s);

int main()
{
    stack* zhong = (stack*)malloc(sizeof(stack));
    char z[80];
    int n, i = 0;

    inistack(zhong, 80);
    printf("输入中缀表达式:");
    scanf_s("%s", z, 80);

    while (z[i] != '\0')
    {
        switch (z[i])
        {
        case '(':
            //printf("vvv:");
            push(zhong, z[i]);
            break;
        case ')':
            push(zhong, z[i]);
            break;
        case '+':
            push(zhong, z[i]);
            break;
        default:
            //printf("%c", z[i]);
            push(zhong, z[i]);
        }
        i++;
    }
    while (zhong->top != -1)
    {
        printf("%c", zhong->m[zhong->top]);
        pop(zhong);
    }
    return 0;
}
//#初始化
void inistack(stack*s, int size)
{
    s->maxsize = size;
    s->m = (char*)malloc(sizeof(char) * (s->maxsize));
    s->top = -1;
}
//#入栈
int push(stack* s, char item)
{
    if (s->top != s->maxsize - 1) //if (s->top != s->maxsize--) 修改
    {
        s->top++;
        s->m[s->top] = item;
    }
    else
        printf("full");
    return 0;
}
//#出栈
int pop(stack* s)
{
    //printf("%c", s->m[s->top]);
    s->top--;
    return 0;
}

初始化要传入二级指针