首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大局指针变量无效,求大神帮助

2013-04-05 
全局指针变量无效,,求大神帮助#includestdio.h#includestdlib.h#definelensizeof(struct linknode)str

全局指针变量无效,,求大神帮助

#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是否为空! 就好比用一个没电的手机先打个电话,再看手机有没有电。。。。

热点排行