哪位C语言高手帮忙看一下

下面这个广义表有什么错误啊?为什么(a,(b,(c,(d,())),e))这个表建立不了呢?#include<stdio.h>#include<stdlib.h>#def... 下面这个广义表有什么错误啊?
为什么(a,(b,(c,(d,())),e))这个表建立不了呢?
#include <stdio.h>
#include <stdlib.h>
#define NULL 0

typedef enum{ATOM, LIST}ElemTag;

typedef struct GLNode
{
int tag;
union
{
char atom;
struct GLNode *sublist;
};
struct GLNode *next;
}GList;

void CreateGList(GList **gl);

int main(void)
{
GList *gl;
CreateGList(&gl);
return 0;
}

void CreateGList(GList **gl)
{
char ch;
scanf("%c", &ch);
if(ch == '\n')
{
*gl = NULL;
}
else if(ch == '(')
{
*gl = (GList *)malloc(sizeof(GList));
(*gl)->tag = LIST;
CreateGList(&((*gl)->sublist));
}
else if(ch>=97&&ch<=122)
{
*gl = (GList *)malloc(sizeof(GList));
(*gl)->tag = ATOM;
(*gl)->atom = ch;
}
if(ch!=')')
scanf("%c", &ch);
if((*gl) == NULL)
{
;
}
else if(ch == ',')
{
CreateGList(&((*gl)->next));
}
else if(ch == ')')
{
(*gl)->next = NULL;
}
}
我又写了一个打印函数,不知道怎么改
谁能再帮我改一下?
void PrintGList(GList *gl)
{
if(gl->tag == LIST)
{
printf("(");

if(gl->sublist == NULL)
{
;
}
else
{
PrintGList(gl->sublist);
}
printf(")");
}
else
{
printf("%c", gl->atom);

}

if(gl->next != NULL)
{
printf(", ");
PrintGList(gl->next);
}
}
展开
 我来答
忘至白葬不情必0T
2007-04-24 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
你的程序没有对()这样的空表进行处理.

if(ch == '\n')
改成
if(ch == '\n' || ch == ')')
就行了
有根香8674
2007-04-24 · 超过19用户采纳过TA的回答
知道答主
回答量:177
采纳率:0%
帮助的人:72.1万
展开全部
路过 看看 不太在行 加点分
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hichenyj
2007-04-24
知道答主
回答量:31
采纳率:0%
帮助的人:7.3万
展开全部
写的太复杂了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
去求知
2007-04-24 · 超过17用户采纳过TA的回答
知道答主
回答量:131
采纳率:0%
帮助的人:0
展开全部
应该系else if(ch == ',') ,不清楚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式