c语言代码,帮忙看看错在哪里?

#include<stdio.h>
#include<malloc.h>
typedef char elemtype;
typedef struct node
{
elemtype ch;
struct node*next;
}Poly;
Poly*GreatPoly(Poly*L)
{
Poly*p,*r;
char a;
int i,n;
int finished=0;
L=(Poly*)malloc(sizeof(Poly));
L->next=L;
r=L;
while(finished==0)
{
printf("请输入一个字符。\n");
p=(Poly*)malloc(sizeof(Poly));
scanf("%c",&p->ch);
p->next=L;
r->next=p;
r=p;
printf("finished=?\n");
scanf("%d",&finished);
}
return L;
}
void Newpoly(Poly*L,Poly*L1,Poly*L2,Poly*L3)
{
Poly*t,*p1,*p2,*p3;
L1=(Poly*)malloc(sizeof(Poly));
L1->ch=0;
L1->next=L1;
L2=(Poly*)malloc(sizeof(Poly));
L2->ch=0;
L2->next=L2;
L3=(Poly*)malloc(sizeof(Poly));
L3->ch=0;
L3->next=L3;
t=L;
p1=L1;
p2=L2;
p3=L3;
while(t->next!=L)
{
if('0'<=t->next->ch<='9')
{
p1->next=t->next;
p1=p1->next;
}
else
{
if('A'<=t->next->ch<='Z'||'a'<=t->next->ch<='z')
{
p2->next=t->next;
p2=p2->next;
}
else
{
p3->next=t->next;
p3=p3->next;
}
}
t=t->next;
}
}
void out(Poly*L)
{
Poly*r;
r=L;
while(r->next!=L)
{
printf("%c ",r->next->ch);
r=r->next;
}
}
main(void)
{
Poly*A,*B,*C,*D;
GreatPoly(A);
Newpoly(A,B,C,D);
out(A);
printf("\n");
out(B);
printf("\n");
out(C);
printf("\n");
out(D);
printf("\n");
}

第1个回答  2010-03-28
请先说出你编译或执行时出现的错误提示,这样别人才能更好的回答你的问题
第2个回答  推荐于2016-04-15
你的程序很多地方都有错,运用指针的时候一定得小心,不能乱指,不然就会出现溢出等错误。我修改了你的程序,可以通过了(如果我对题目没理解错的话)。修改的地方我都标明了。你自己看看,
#include<stdio.h>
#include<malloc.h>
typedef char elemtype;
typedef struct node
{
elemtype ch;
struct node*next;
}Poly;
Poly*GreatPoly(Poly*L) //建立头结点为L的单链表
{
Poly*p,*r;
//char a;
//int i,n;
int finished=0;

L->next=NULL; //L改为NULL
r=L;
while(finished==0)
{
printf("请输入一个字符。\n");
p=(Poly*)malloc(sizeof(Poly));
scanf("\n%c",&p->ch); //添加了一个"\n"
p->next=NULL; //L改为NULL
r->next=p;
r=p;
printf("finished=?\n");
scanf("%d",&finished);
}
return L;
}
void Newpoly(Poly*L,Poly*L1,Poly*L2,Poly*L3)
{
Poly*t,*p1,*p2,*p3;
Poly* temp; //我添加的
//L1=(Poly*)malloc(sizeof(Poly));
//L1->ch='0';
//L1->next=L1;
L1->next = NULL;
//L2=(Poly*)malloc(sizeof(Poly));
//L2->ch='0';
//L2->next=L2;
L2->next = NULL;
//L3=(Poly*)malloc(sizeof(Poly));
//L3->ch='0';
//L3->next=L3;
L3->next = NULL;
t=L;
p1=L1;
p2=L2;
p3=L3;
while(t->next!=NULL) //L改为NULL
{
if('0'<=t->next->ch && t->next->ch<='9') //'0'<=t->next->ch<='9'改为前面形式
{
temp = (Poly*)malloc(sizeof(Poly)); //每次新建一个结点重新分配空间
temp->next = NULL;
temp->ch = t->next->ch;
p1->next = temp;
//p2->next = t->next;
p1=p1->next;
}
else
{
if(('A'<=t->next->ch && t->next->ch<='Z' )||('a'<=t->next->ch && t->next->ch<='z'))
{
temp = (Poly*)malloc(sizeof(Poly));
temp->next = NULL;
temp->ch = t->next->ch;
p2->next = temp;
//p2->next=t->next;
p2=p2->next;
}
else
{
temp = (Poly*)malloc(sizeof(Poly));
temp->next = NULL;
temp->ch = t->next->ch;
p3->next = temp;
//p3->next=t->next;
p3=p3->next;
}
}
t=t->next;
}
}
void out(Poly*L)
{
Poly*r;
if(L->next == NULL)
printf("empty!");
r=L;
while(r->next!=NULL) //L改为NULL
{
printf("%c ",r->next->ch);
r=r->next;
}
printf("\n"); //我添加的
}
main(void)
{
Poly*A,*B,*C,*D;
A=(Poly*)malloc(sizeof(Poly)); //最好先初始化
B=(Poly*)malloc(sizeof(Poly));
C=(Poly*)malloc(sizeof(Poly));
D=(Poly*)malloc(sizeof(Poly));
GreatPoly(A);
Newpoly(A,B,C,D);
printf("List A: ");
out(A);
//printf("\n");
printf("List B: "); //我添加的
out(B);
//printf("\n");
printf("List C: ");
out(C);
//printf("\n");
printf("List D: ");
out(D);
//printf("\n");
}本回答被提问者采纳
第3个回答  2010-03-29
把错误贴下
第4个回答  2010-03-28
太乱了,能不能说说你程序要实现什么
相似回答