dylaaaaan 2022-09-28 19:48 采纳率: 100%
浏览 20
已结题

关于#c语言#的问题,如何解决?

c语言拼接两个顺序表并按从小到大排序时输入第八个和第十六个元素时出现一个奇怪的回车
//
// Created by Dylan on 2022/9/27.
//
#include "stdio.h"
#include "stdlib.h"

#define INITAL 20
#define OVERFLOW 0
#define ERROR -1
#define ADD 5
#define OK 0
typedef struct sq {
    int *elem;
    int length;
    int listsize;
} sqlist;
sqlist C;

void initlist(struct sq *L, int n);

int listinsert(struct sq *L, int i, int e);

void listdisplay(sqlist *L);

void mergelist(sqlist A, sqlist B);

void initlist(struct sq *L, int n) {
    L->elem = (int *) malloc(INITAL * sizeof(int));
    if (!L->elem)exit(OVERFLOW);
    L->length = 0;
    L->listsize = INITAL;
    int elem;
    if (n < INITAL) {
        for (int i = 0; i < n; i++) {
            printf("请输入第%d个元素", i + 1);
            scanf("%d", &elem);
            L->elem[i] = elem;
            //L->elem++;
            L->length++;
        }
    } else {
        int *newbase;
        int add;
        add = (n - INITAL) / ADD + 1;
        newbase = (int *) realloc(L->elem, (INITAL + add * ADD) * sizeof(int));
        if (!newbase) exit(ERROR);
        L->elem = newbase;
        L->listsize = INITAL + ADD;
        for (int i = 0; i < n; i++) {
            printf("请输入第%d个元素", i + 1);
            scanf("%d", &elem);
            L->elem[i] = elem;
            //L->elem++;
            L->length++;
        }
    }
}

int listinsert(struct sq *L, int i, int e) {
    if (i < 1 || i > L->length + 1) {
        printf("插入位置不对\n");
        return ERROR;
    }
    int *newbase;
    if (L->length >= L->listsize) {
        newbase = (int *) realloc(L->elem, (INITAL + ADD) * sizeof(int));
        if (!newbase) exit(ERROR);
        L->elem = newbase;
        L->listsize = INITAL + ADD;
    }
    for (int j = L->length - 1; j >= i - 1; j--) {
        L->elem[j + 1] = L->elem[j];
    }
    L->elem[i - 1] = e;
    return OK;
}

void listdisplay(sqlist *L) {
    printf("\n");
    for (int i = 0; i < L->length; i++) {
        printf("%d\t", L->elem[i]);
        //printf("%d",i);
    }
}

void mergelist(sqlist a, sqlist b) {

    C.length = a.length + b.length;
    C.listsize = C.length;
    C.elem = malloc(C.listsize * sizeof(int));
    if (!C.elem)exit(OVERFLOW);
    for (int i = 0; i < a.length; i++) {
        for (int j = i; j < a.length - i; j++) {
            if (a.elem[j] > a.elem[j + 1]) {
                int temp = a.elem[j];
                a.elem[j] = a.elem[j + 1];
                a.elem[j + 1] = temp;
            }
        }
    }
//    for (int i = 0; i < a.length - 1; i++) {
//        for (int j = i; j < a.length; j++) {
//            if (a.elem[i] > a.elem[j]) {
//                int temp = a.elem[i];
//                a.elem[i] = a.elem[j];
//                a.elem[j] = temp;
//            }
//        }
//    }
    for (int i = 0; i < a.length; i++) {
        C.elem[i] = a.elem[i];
    }
    for (int j = 0; j < b.length; j++) {
        for (int k = 0; k < C.length; k++) {
            if (b.elem[j] <= C.elem[k]) {
                listinsert(&C, k + 1, b.elem[j]);
                break;
            }
        }
    }
}

int main() {
    sqlist A, B;
    int n1, n2;
    printf("请输入初始线性表A,B的长度n1,n2=");
    scanf("%d %d", &n1, &n2);
    printf("请输入A的元素\n");
    initlist(&A, n1);
    printf("请输入B的元素\n");
    initlist(&B, n2);
    mergelist(A, B);
    listdisplay(&C);
    return 0;
}

用的是clion
在输入时情况如下,运行结果没有问题。

img

  • 写回答

4条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 已结题 9月29日
      • 已采纳回答 9月29日
      • 修改了问题 9月28日
      • 创建了问题 9月28日

      悬赏问题

      • ¥50 Window+VScode+opencv+tensorflow+anaconda实现行人检测与跟踪
      • ¥15 用AT89C51单片机汇编实现按键流水灯
      • ¥15 关于#matlab#的问题:偏微分方程降噪的程序,上面的迭代式的表达
      • ¥15 二叉树用二叉链存储问题
      • ¥15 VS2019不能设置QT的verson了,设置了点确定又消失了,怎么解决呢?
      • ¥15 用java解决,要解释一下给我
      • ¥100 项目经理想学开发牛牛指点迷津有偿
      • ¥15 vscode 配置时出现问题
      • ¥15 pygame安装失败
      • ¥15 数据库原理怎么从文字描述中的句子推出(分析)函数依赖?