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
在输入时情况如下,运行结果没有问题。