链表打印 ,循环出现 segmentation fault ,急急急
/*下面两个是我定义的结构*/
struct element
{
int n; /*le n de base B*/
int c; /*le c de GE*/
struct element *g_next;
};
struct GrandEntier
{
int B; /*Base de GE*/
int L; /*length de GE*/
int signe;
struct element *premier;
};
typedef struct element element;
typedef struct GrandEntier GE;
/*打印函数,逐个显示ge x的值*/
void affiche10(GE *X)
{
element *a;
a=X->premier;
if(a)
{
printf("\nAffiche en base 10 le GE X sur stdout.\n");
for(;a;a=a->g_next)
{
printf("%c%d*%d^%d",(X->signe>0)? '+':'-',a->c,X->B,a->n);
}
}
}
void main()
{
int a,b;
GE *X,*Y,*Z;
printf("insere deux entier:");
scanf("%d%d",&a,&b);
printf("%d,%d\n",a,b);
X=int2GE(a);
Y=int2GE(b);
affiche10(X);
affiche10(Y);
}
#include <stdio.h>
/*下面两个是我定义的结构*/
struct element
{
int n; /*le n de base B*/
int c; /*le c de GE*/
struct element *g_next;
};
struct GrandEntier
{
int B; /*Base de GE*/
int L; /*length de GE*/
int signe;
struct element *premier;
};
typedef struct element element;
typedef struct GrandEntier GE;
GE *Init_GE()
{
GE *ge;
ge=(GE*)malloc(sizeof(GE));
ge->B=10;
ge->L=0;
ge->signe=1;
ge->premier=NULL;
return ge;
}
GE *int2GE(int n)
{
GE *ge;
element *p,*q;
/*删
if(n==0)
{
return NULL;
}*/
ge=Init_GE();
//ge->signe=(n>0)? 1:-1; 改为以下语句以免输出两个负号
if (n >0 ) ge->signe = 1;
else
{
ge->signe = -1;
n = -n;
}
while(n!=0)
{
if(ge->L==0)
{
q=(element*)malloc(sizeof(element));
q->c=n%ge->B;
q->n=ge->L;
q->g_next=NULL;
ge->premier=q;
ge->L++;
n=n/ge->B;
}
else
{
p=(element*)malloc(sizeof(element));
p->c=n%ge->B;
p->n=ge->L;
p->g_next=NULL;
q->g_next=p;
q=p;
n=n/ge->B;
ge->L++;
}
}
return ge;
}
/*打印函数,逐个显示ge x的值*/
void affiche10(GE *X)
{
element *a;
a=X->premier;
if(a)
{
printf("\nAffiche en base 10 le GE X sur stdout.\n");
for(;a;a=a->g_next)
{
printf("%c%d*%d^%d",(X->signe>0)? '+':'-',a->c,X->B,a->n);
}
}
}
void main()
{
int a,b;
GE *X,*Y,*Z;
printf("insere deux entier:");
scanf("%d%d",&a,&b);
printf("%d,%d\n",a,b);
X=int2GE(a);
Y=int2GE(b);
affiche10(X);
affiche10(Y);
}