weixin_67327476 2022-12-07 12:17 采纳率: 100%
浏览 23
已结题

程序正常输入但没有输出结果(顺序表的合并)

程序没有输出

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXSIZE 100
#define ERROR 0
typedef int Elemtype;
typedef struct
{
    Elemtype *elem;
    int last;
}SeqList;
void InitList(SeqList *L);
void print(SeqList *L);
void mergeList(SeqList *LA,SeqList *LB,SeqList *LC);
void Create(SeqList *L);
int main()
{
    SeqList *LA,*LB,*LC;
    InitList(&LA);
    InitList(&LC);
    Create(LA);
    InitList(&LB);
    Create(LB);
    mergeList(LA,LB,LC);
    printf("合并前LA:");
    print(LA);
    printf("合并前LB:");
    print(LB);
    printf("合并后LC:");
    print(LC);
    return 0;

}
void InitList(SeqList *L)
{
    L->last=0;
    L->elem=(int*)malloc(MAXSIZE*sizeof(int));
    if(!L->elem){
        return ERROR;
    }
    return L;
}
void Create(SeqList *L)
{
    int i=0,x,flag=1;
    while(flag)
    {
        scanf("%d",&x);
        if(x>0)
        {
            L->elem[i]=x;
            i++;
        }
        else
        {
            L->elem[i]='0';
            flag=0;
        }
    }
    L->last=i;
}
void mergeList(SeqList *LA,SeqList *LB,SeqList *LC)
{
    int i=0,j=0,k=0;
    while(i<LA->last&&j<LB->last)
    {
        if(LA->elem[i]<LB->elem[j])
        {
            printf("aaa");
            LC->elem[k]=LA->elem[i];
            i++;
            k++;
        }
        else if(LA->elem[i]=LB->elem[j])
        {
            LC->elem[k]=LA->elem[i];
            i++;
            k++;
            j++;
        }
        else
        {
            LC->elem[k]=LB->elem[j];
            j++;
            k++;
        }
    }
    while(i<LA->last)
    {
        LC->elem[k]=LA->elem[i];
        i++;
        k++;
    }
    while(j<LB->last)
    {
        LC->elem[k]=LB->elem[j];
        k++;
        j++;
    }
    LC->last=k+1;
}
void print(SeqList *L)
{
    int i;
    printf("ok");
    for(i=0;i<L->last;i++)
    {
        printf("%d ",L->elem[i]);
    }
}


顺序表可以正常输入但是没有结果的输出

用print试了一下,应该问题是在create(LB)之后,但是把mergeList删掉后还是没有输出,包括printf都没有

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-12-07 12:54
    关注

    改动处见注释,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h>
    #define MAXSIZE 100
    #define ERROR 0
    typedef int Elemtype;
    typedef struct
    {
        Elemtype* elem;
        int last;
    }SeqList;
    void InitList(SeqList* L);
    void print(SeqList* L);
    void mergeList(SeqList* LA, SeqList* LB, SeqList* LC);
    void Create(SeqList* L);
    int main()
    {
        SeqList LA,  LB,  LC;  //SeqList* LA, * LB, * LC; 修改
        
        InitList(&LC);
    
        InitList(&LA);
        Create(&LA);     //Create(LA); 修改
    
        InitList(&LB);
        Create(&LB);     //Create(LB); 修改
    
        printf("合并前LA:");
        print(&LA);       //print(LA); 修改
    
        printf("合并前LB:");
        print(&LB);       //print(LB); 修改
    
        mergeList(&LA, &LB, &LC);  //mergeList(LA, LB, LC); 修改
    
        printf("合并后LC:");
        print(&LC);       //print(LC); 修改
        return 0;
    }
    void InitList(SeqList* L)
    {
        L->last = 0;
        L->elem = (int*)malloc(MAXSIZE * sizeof(int));
        if (!L->elem) {
            return;   //ERROR; 修改
        }
        //return L;    修改
    }
    void Create(SeqList* L)
    {
        int i = 0, x, flag = 1;
        while (flag)
        {
            scanf("%d", &x);
            if (x > 0)
            {
                L->elem[i] = x;
                i++;
            }
            else
            {
                L->elem[i] = '0';
                flag = 0;
            }
        }
        L->last = i;
    }
    void mergeList(SeqList* LA, SeqList* LB, SeqList* LC)
    {
        int i = 0, j = 0, k = 0;
        while (i < LA->last && j < LB->last)
        {
            if (LA->elem[i] < LB->elem[j])
            {
                printf("aaa\n");
                LC->elem[k] = LA->elem[i];
                i++;
                k++;
            }
            else if (LA->elem[i] == LB->elem[j]) //else if (LA->elem[i] = LB->elem[j]) 修改
            {
                LC->elem[k] = LA->elem[i];
                i++;
                k++;
                j++;
            }
            else
            {
                LC->elem[k] = LB->elem[j];
                j++;
                k++;
            }
        }
        while (i < LA->last)
        {
            LC->elem[k] = LA->elem[i];
            i++;
            k++;
        }
        while (j < LB->last)
        {
            LC->elem[k] = LB->elem[j];
            k++;
            j++;
        }
        LC->last = k;  //LC->last = k + 1; 修改
    }
    void print(SeqList* L)
    {
        int i;
        printf("ok");
        for (i = 0; i < L->last; i++)
        {
            printf("%d ", L->elem[i]);
        }
        printf("\n");  //修改
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月20日
  • 已采纳回答 12月12日
  • 创建了问题 12月7日

悬赏问题

  • ¥15 centos7.9脚本,怎么排除特定的访问记录
  • ¥15 关于#Django#的问题:我的静态文件呢?
  • ¥15 关于CPLEX的问题,请专家解答
  • ¥15 cocos的点击事件 怎么穿透到 原生fragment上。
  • ¥20 基于相关估计的TDOA算法中的加权最小二乘拟合法matlab仿真
  • ¥20 基于相关估计的TDOA算法中的自适应加权广义互相关法。
  • ¥15 abaqus CAE 2024软件启动问题
  • ¥20 基于相关估计的TDOA算法中的局部互相关函数滤波matlab仿真
  • ¥15 CDH6.0.1 hue报错
  • ¥15 javaFX利用scene builder的fxml文件进行开发时的label setText方法未生效问题