Catcheryp 2016-03-06 04:40 采纳率: 100%
浏览 1410
已采纳

求高手帮忙解答一下关于程序的题目,纠结一上午,跪求帮忙!

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

typedef struct node *PtrToNode;
typedef PtrToNode stack;
typedef PtrToNode Position;

struct node
{
    char *symbol;
    Position next;
};

int Isempty(stack s)
{
    return s->next == NULL;
}

void Pop(stack s)
{
    Position first;
    if(Isempty(s))
        printf("Empty stack!\n");
    else
    {
        first = s->next;
        s->next = s->next->next;
        free(first);
    }
}

void MakeEmpty(stack s)
{
    if(s == NULL)
        printf("Must use CreatStack first!\n");
    else
        while(!Isempty(s))
            Pop(s);
}


stack CreatStack()
{
    stack s = (node *)malloc(sizeof(struct node));
    if(s == NULL)
        printf("Out of space!\n");
    s->next = NULL;
    MakeEmpty(s);

    return s;
}

void Push(char *sign, stack s)
{
    Position temp = (node *)malloc(sizeof(struct node));

    if(temp == NULL)
        printf("Out of space!\n");
    else
    {
        temp->symbol = sign;
        temp->next = s->next;
        s->next = temp;
    }
}

char* Top(stack s)
{
    if(!Isempty(s))
        return s->next->symbol;
    printf("Empty stack!\n");
    return 0;
}


int main()
{
    char *sign1;
//   char *sign2 = ")";
//   char *sign3 = "begin";
//   char *sign4 = "end";
//   char *sign5 = "[";
//   char *sign6 = "}";


(1) stack s = CreatStack();

    while(scanf("%s", sign1) == 1)
    {
//(2)       stack s = CreatStack();
        if(Isempty(s))
        {
(3)         if(strcmp(sign1, "(") ==  0)
                printf("PPPPPPPPPPPP\n");
            if(strcmp(sign1, "(") == 0 || strcmp(sign1, "[") == 0 || strcmp(sign1, "{") == 0 || strcmp(sign1, "begin") == 0)
            {
                Push(sign1, s);
            }
            else 
            {
                printf("AWrong!!!\n");
                break;
            }

        }
        else
        {
            if(strcmp(sign1, "(") == 0 || strcmp(sign1, "[") == 0 || strcmp(sign1, "{") == 0 || strcmp(sign1, "begin") == 0)
            {
                Push(sign1, s);
                printf("EEEEEEEE\n");
            }
            else if(strcmp(sign1, ")") == 0 || strcmp(sign1, "]") == 0 || strcmp(sign1, "}") == 0 || strcmp(sign1, "end") == 0)
            {
                printf("DDDDDDD\n");
                if((strcmp(Top(s), "(") == 0 && strcmp(sign1, ")") == 0) || (strcmp(Top(s), "[") == 0 && strcmp(sign1, "]") == 0)||
                   (strcmp(Top(s), "{") == 0 && strcmp(sign1, "}") == 0) || (strcmp(Top(s), "begin") == 0 && strcmp(sign1, "end") == 0))
                {
                    Pop(s);
                    printf("GGGGGGGGGGGGGGGGGGG\n");
                }
                else
                {
                    printf("BWrong!!!\n");
                    break;
                }
            }
        }
    }

        if(Isempty(s))
            printf("You are right!\n");
        else
            printf("CWrong!!!\n");
        printf("%s\n", Top(s));
    return 0;
}

我搞不明白当stack s在while之前的话,只输入“(”,应该会执行(3)处的if,可事实是不执行

然后我换了下stack s的位置就可以执行了,为什么???

  • 写回答

3条回答

  • xSeeker~ 2016-03-06 04:52
    关注

    char *sign1;你没有为sign1动态分配内存,scanf得到的数据往哪存呀?你可以用char sign1[10];简单测试一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器