C语言主函数调用函数时没有输出结果

为什么没有输出结果

#include 
#include 
#define MaxSize 100

typedef int ElemType;
typedef struct
{
    int data[MaxSize];
    int length;
}SqList;

//初始化线性表
void InitList(SqList *&L)
{
    L->length=0;
}

//创建顺序表
void CreatList(SqList *L)
{
    int n, len, i;
    printf("输入顺序表的长度:");
    scanf("%d", &len);
    L->length = len;
    printf("输入顺序表的元素:");
    for (i=0;iscanf("%d",&n);
        L->data[i]=n;
    }
} 

//3、顺序表LA和顺序表LB中的元素值无序,求出LA和LB的并集,结果存储在顺序表LC中。
void UnioList(SqList *LA,SqList *LB,SqList *&LC)
{
    int i,j,k;
    for(k=0;klength;k++){
        LC->data[LC->length]=LA->data[k];
        LC->length++;
    }
    for(i=0;ilength;i++){
        for(j=0;ilength;j++){
            if(LB->data[i]!=LA->data[j]){
                LC->data[LC->length]=LB->data[i];
                LC->length++;
            }
        }
    }
}

//输出顺序表
void OutList(SqList* L)
{
    int i;
    for (i=0;ilength;i++)
        printf("%d ",L->data[i]);
    printf("\n\n");
} 

int main()
{
    SqList L1,L2,LA,LB,L;
    SqList* LC=&L;
    ElemType x;
    printf("顺序表LA:\n");
    CreatList(&LA);
    printf("顺序表LB:\n");
    CreatList(&LB);
    printf("-------顺序表LA和顺序表LB中的元素值无序,求出LA和LB的并集,结果存储在顺序表LC中-------\n");
    UnioList(&LA,&LB,LC);
    printf("LA和LB的并集:"); 
    OutList(LC);
    return 0;
}

void UnioList(SqList *LA,SqList *LB,SqList *&LC) 函数算法有错误,循环因子错误,还有表 L 未初始化等,修改处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
 
typedef int ElemType;
typedef struct
{
    int data[MaxSize];
    int length;
}SqList;
 
//初始化线性表
void InitList(SqList *&L)
{
    L->length=0;
}
 
//创建顺序表
void CreatList(SqList *L)
{
    int n, len, i;
    printf("输入顺序表的长度:");
    scanf("%d", &len);
    L->length = len;
    printf("输入顺序表的元素:");
    for (i=0;i<len;i++)
    {
        scanf("%d",&n);
        L->data[i]=n;
    }
} 
 
//3、顺序表LA和顺序表LB中的元素值无序,求出LA和LB的并集,结果存储在顺序表LC中。
void UnioList(SqList *LA,SqList *LB,SqList *&LC)
{
    int i,j,k,flg;   //修改
    for(k=0;k<LA->length;k++){
        LC->data[LC->length]=LA->data[k];
        LC->length++;
    }
    for(i=0;i<LB->length;i++){
        for(j=0,flg=0;j<LA->length;j++){//for(j=0,flg=0;i<LA->length;j++) i<LA->length; i错误
            if(LB->data[i]==LA->data[j]){//if(LB->data[i]!=LA->data[j])
               flg = 1;                  //算法修改
               break;                    //修改
            }
        }
        if(!flg){                        //修改
            LC->data[LC->length]=LB->data[i];
            LC->length++;
        }
    }
}
 
//输出顺序表
void OutList(SqList* L)
{
    int i;
    for (i=0;i<L->length;i++)
        printf("%d ",L->data[i]);
    printf("\n\n");
} 
 
int main()
{
    SqList L1,L2,LA,LB,L;
    SqList* LC=&L;
    InitList(LC); //初始化顺序表 L 修改
    ElemType x;
    printf("顺序表LA:\n");
    CreatList(&LA);
    printf("顺序表LB:\n");
    CreatList(&LB);
    printf("-------顺序表LA和顺序表LB中的元素值无序,求出LA和LB的并集,结果存储在顺序表LC中-------\n");
    UnioList(&LA,&LB,LC);
    printf("LA和LB的并集:");
    OutList(LC);

    return 0;
}

LC没有调用初始化函数,导致length变量初始不是0