全局指针变量无效,,求大神帮助
#include<stdio.h>
#include<stdlib.h>
#define len sizeof(struct linknode)
struct linknode
{
char data;
struct linknode *next;
};
extern void creat();
extern int cp();
struct linknode *head1,*head2;
void main()
{
int k;
system("color 07");
creat();
k=cp();
if(k==1)
printf("该字符序列是回文!!");
else
printf("该字符序列不是回文!!");
}
int cp()
{
int j;struct linknode *p1,*p2;
p1=head1->next;
p2=head2->next;
while(p1->data==p2->data&&p1!=NULL)
{
p1=p1->next;
p2=p2->next;
}
if(p1!=NULL) j=0;
else j=1;
return(j);
}
void creat()
{
struct linknode *p1,*p2,*p3,*p4;int n=0;
head1=(struct linknode *)malloc(len);
head2=(struct linknode *)malloc(len);
p1=p2=(struct linknode *)malloc(len);
p3=p4=(struct linknode *)malloc(len);
printf("请输入数据(以@结束):");
scanf("%c",&p1->data);
while(p1->data!='@')
{
n=n+1;
if(n==1) {head1->next=p1;p3->data=p1->data;head2->next=p3;p1->next=NULL;}
else
{
p3->data=p1->data;
p1->next=p2;
p4->next=p3;
head1->next=p1;
}
p2=p1;p4=p3;
p1=(struct linknode *)malloc(len);
p3=(struct linknode *)malloc(len);
printf("请输入数据(以@结束):");
getchar();scanf("%c",&p1->data);
}
p4->next=NULL;
}
[解决办法]
新手对你的程序有几个疑问。
1.你的程序的extern,为什么要加这个。
2.create函数你想实现什么功能,为什么不用return 指针。
3.在你的int cp()函数中,head1和head2是什么,从哪里来,哪里有定义什么的吗
[解决办法]
#include<stdio.h>
#include<stdlib.h>
#define len sizeof(struct linknode)
struct linknode
{
char data;
struct linknode *next;
};
void creat();
int cp();
struct linknode *head1,*head2;
void main()
{
int k;
system("color 07");
creat();
/*do {*/
/*printf("%c", head1->data);*/
/*head1 = head1->next;*/
/*}while(head1!=NULL); */
k=cp();
printf("%d", k);
if(k==1)
printf("该字符序列是回文!!");
else
printf("该字符序列不是回文!!");
}
int cp()
{
int j;struct linknode *p1,*p2;
p1=head1->next;
p2=head2->next;
while((p1!=NULL
[解决办法]
p2!=NULL) && p1->data==p2->data)
{
/*printf("p1:%c, p2:%c\n", p1->data, p2->data);*/
p1=p1->next;
p2=p2->next;
}
if(p1!=NULL) j=0;
else j=1;
return(j);
}
void creat()
{
struct linknode *p1,*p2,*p3,*p4;int n=0;
head1=(struct linknode *)malloc(len);
head2=(struct linknode *)malloc(len);
p1=p2=(struct linknode *)malloc(len);
p3=p4=(struct linknode *)malloc(len);
printf("请输入数据(以@结束):");
scanf("%c",&p1->data);
while(p1->data!='@')
{
n=n+1;
if(n==1) {
head1->next=p1;
p3->data=p1->data;
head2->next=p3;
p1->next=NULL;
}
else
{
p3->data=p1->data;
p1->next=p2;
p4->next=p3;
head1->next=p1;
}
p2=p1;p4=p3;
p1=(struct linknode *)malloc(len);
p3=(struct linknode *)malloc(len);
printf("请输入数据(以@结束):");
char c;
scanf("%c",&c);
scanf("%c",&c);
p1->data = c;
}
p4->next=NULL;
}
------解决方案--------------------
head1,head2在cp()中是不变的,而p1,p2在循环中是一直变化的,[p1=p1->next, p2=p2->next]
当p1->next 为空,赋值后p1就为空了,这时再回到循环的判断处,你是先判断p1,p2指向的值是否相等
然后再判断p1是否为空! 就好比用一个没电的手机先打个电话,再看手机有没有电。。。。