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条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?