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

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面