求两个有序表的合并 为什么没输出呢,请问出现这种情况应该怎么检查修改啊



```c
#include
#include<string.h>
#include
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int Status;
typedef int ElemType;
typedef struct
{
    ElemType data[MAXSIZE];    /*存储数组元素*/
    int length;      /*表当前长度*/
}List;/*数组存储类型名*/
int ListLength(List L);
Status GetElem(List L,int i,ElemType *e);
Status ListInsert(List *L,ElemType i,ElemType e);
void MergeList(List La, List Lb,List *Lc);
Status ListEmpty(List L);
int main()
{
    int i;
    char ch;
    List La,Lb,Lc;
    La.length=0;
    Lb.length=0;
    for(i=0;;i++)
    {
        scanf("%d%c",&La.data[i],&ch);
        La.length++;
        if(ch=='\n')
            break;
    }
    for(i=0;;i++)
    {
        scanf("%d%c",&Lb.data[i],&ch);
        Lb.length++;
        if(ch=='\n')
            break;
    }
    if(!ListEmpty(La)&&!ListEmpty(Lb))
        MergeList(La,Lb,&Lc);
    for(i=0;i<Lc.length;i++)
        printf("%d ",Lc.data[i]);
    return 0;
}

/*返回L中数据元素个数*/
int ListLength(List L)
{
    return L.length;
}

/*用e返回L中第i个数据元素的值*/
Status GetElem(List L,int i,ElemType *e)
{
    if(L.length==0||i<1||i>L.length)
        return ERROR;
    *e=L.data[i-1];
    return OK;
}

/*L中第i个位置之前插入定的数据元素e,L的长度+1*/
Status ListInsert(List *L,ElemType i,ElemType e)
{
    int k;
    if(i==L->length+1)
        L->data[i-1]=e;
    else
    {
        for(k=L->length-1;k>=i-1;k--)
        {
            L->data[k+1]=L->data[k];
        }
        L->data[i-1]=e;
    }
    L->length++;
}

/*归并LaLb得到新的表Lc,Lc的数据元素也按值非递减排列*/
void MergeList(List La, List Lb,List *Lc)
{
    int i=1,j=1,k=0;
    int La_len,Lb_len,Lc_len;
    int ai,bj;
    La_len=ListLength(La);
    Lb_len=ListLength(Lb);
    Lc_len=ListLength(*Lc);
    while(i<=La_len&&i<=Lb_len)    /*La和表Lb均非空*/
    {
        GetElem(La,i,&ai);
        GetElem(Lb,j,&bj);
        if(ai<=bj)
        {
            ListInsert(Lc,++k,ai);
            ++i;
        }
        else
        {
            ListInsert(Lc,++k,bj);
            ++j;
        }
    }
    while(i<=La_len)       /*La非空且表Lb*/
    {
        GetElem(La,i++,&ai);
        ListInsert(Lc,++k,ai);
    }
    while(j<=Lb_len)      /*Lb非空且表La*/
    {
        GetElem(Lb,j++,&bj);
        ListInsert(Lc,++k,bj);
    }
}
Status ListEmpty(List L)
{
    if(L.length==0)
        return TRUE;
    else
        return FALSE;
}


```

在主函数里,添加表Lc的长度初始值,如下:
List La,Lb,Lc;
La.length=0;
Lb.length=0;
Lc.length=0; // 修改 添加表 Lc的长度初始化
MergeList()函数里:while(i<=La_len && j<=Lb_len) //while(i<=La_len&&i<=Lb_len) 修改
整体修改如下,改动处见注释,供参考:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int Status;
typedef int ElemType;
typedef struct
{
    ElemType data[MAXSIZE];//存储数组元素
    int length;//表当前长度
}List;//数组存储类型名
int ListLength(List L);
Status GetElem(List L,int i,ElemType *e);
Status ListInsert(List *L,ElemType i,ElemType e);
void MergeList(List La, List Lb,List *Lc);
Status ListEmpty(List L);
int main()
{
    int i;
    char ch;
    List La,Lb,Lc;
    La.length=0;
    Lb.length=0;
    Lc.length=0;  // 修改
    for(i=0;;i++)
    {
        scanf("%d%c",&La.data[i],&ch);
        La.length++;
        if(ch=='\n')
            break;
    }
    for(i=0;;i++)
    {
        scanf("%d%c",&Lb.data[i],&ch);
        Lb.length++;
        if(ch=='\n')
            break;
    }
    if(!ListEmpty(La)&&!ListEmpty(Lb))
        MergeList(La,Lb,&Lc);
    for(i=0;i<Lc.length;i++)
        printf("%d ",Lc.data[i]);
    return 0;
}

//返回L中数据元素个数
int ListLength(List L)
{
    return L.length;
}

//用e返回L中第i个数据元素的值
Status GetElem(List L,int i,ElemType *e)
{
    if(L.length==0||i<1||i>L.length)
        return ERROR;
    *e=L.data[i-1];
    return OK;
}

//L中第i个位置之前插入定的数据元素e,L的长度+1
Status ListInsert(List *L,ElemType i,ElemType e)
{
    int k;
    if(i==L->length+1)
        L->data[i-1]=e;
    else
    {
        for(k=L->length-1;k>=i-1;k--)
        {
            L->data[k+1]=L->data[k];
        }
        L->data[i-1]=e;
    }
    L->length++;
}

//归并LaLb得到新的表Lc,Lc的数据元素也按值非递减排列
void MergeList(List La, List Lb,List *Lc)
{
    int i=1,j=1,k=0;
    int La_len,Lb_len,Lc_len;
    int ai,bj;
    La_len=ListLength(La);
    Lb_len=ListLength(Lb);
    Lc_len=ListLength(*Lc);
    while(i<=La_len && j<=Lb_len)
    //while(i<=La_len&&i<=Lb_len)修改
    {
        GetElem(La,i,&ai);
        GetElem(Lb,j,&bj);
        if(ai<=bj)
        {
            ListInsert(Lc,++k,ai);
            ++i;
        }
        else
        {
            ListInsert(Lc,++k,bj);
            ++j;
        }
    }
    while(i<=La_len)       //La非空且表Lb空
    {
        GetElem(La,i++,&ai);
        ListInsert(Lc,++k,ai);
    }
    while(j<=Lb_len)      //Lb非空且表La空
    {
        GetElem(Lb,j++,&bj);
        ListInsert(Lc,++k,bj);
    }
}
Status ListEmpty(List L)
{
    if(L.length==0)
        return TRUE;
    else
        return FALSE;
}


参考GPT和自己的思路:这段代码实现的功能是将两个有序表合并成一个新的有序表,并输出新表的元素。但是在主函数中调用 MergeList 后并没有输出结果,可能是因为没有正确处理输出格式。

要检查和修改这个问题,可以在 MergeList 函数末尾添加一行代码,输出合并后的表 Lc:

for(i=0;i<Lc.length;i++)
    printf("%d ",Lc.data[i]);
printf("\n");  // 加上换行输出

这样就会输出合并后表 Lc 的所有元素,每个元素后面跟一个空格和一个换行符。