数据结构的题目帮忙看下~~~

#include
#include

typedef struct node
{
int data;
struct node *next;
}linklist;

void creatlist(linklist *L,int n )
{
L->next=NULL;
linklist *p;
int i=0,ch;
printf("按大小顺序输入%d个数:\n",n);
while(i {
scanf("%d\n",&ch);
p=(linklist *)malloc(sizeof(linklist));
p->data=ch;
p->next=NULL;
L->next=p;
L=L->next;
i++;
}
L->next=NULL;
}

void insert(linklist *L)
{
int e;
printf("输入要插入的数:\n");
scanf("%d\n",&e);
linklist *p=L->next,*pre=L,*s;
s=(linklist *)malloc(sizeof(linklist));
s->data=e;
while (p&&p->data<=e)
{
pre=p;
p=p->next;
}
pre->next=s;
s->next=p;
}

void printlink(linklist *L)
{
while(L->next)
{
printf("%d\n",L->next->data);
L=L->next;
}
}

void main()
{
linklist *h=(linklist *)malloc(sizeof(linklist));
creatlist(h,5);
printf("输出链表:\n");
printlink(h);
insert(h);
printf("输出插入后的链表:\n");
printlink(h);
getch();
}
为什么每次结束要用^z才能结束
还有怎样变成回车结束,新手求解答~~~~

把你那个要接收的地方换成getchar()不知道行不行?

你的主要问题是两句scanf里面都多了个'\n'
去掉就行了,程序没问题

 #include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int data;
    struct node *next;
}linklist;

void creatlist(linklist *L, int n)
{
    L->next = NULL;
    linklist *p;
    int i = 0, ch;
    printf("按大小顺序输入%d个数:\n", n);
    while (i<n)
    {
        scanf("%d", &ch);
        p = (linklist *)malloc(sizeof(linklist));
        p->data = ch;
        p->next = NULL;
        L->next = p;
        L = L->next;
        i++;
    }
    L->next = NULL;
}


void insert(linklist *L)
{
    int e;
    printf("输入要插入的数:\n");
    scanf("%d", &e);
    linklist *p = L->next, *pre = L, *s;
    s = (linklist *)malloc(sizeof(linklist));
    s->data = e;
    while (p&&p->data <= e)
    {
        pre = p;
        p = p->next;
    }
    pre->next = s;
    s->next = p;
}

void printlink(linklist *L)
{
    while (L->next)
    {
        printf("%d\n", L->next->data);
        L = L->next;
    }
}


void main()
{
    linklist *h = (linklist *)malloc(sizeof(linklist));
    creatlist(h, 5);
    printf("输出链表:\n");
    printlink(h);
    insert(h);
    printf("输出插入后的链表:\n");
    printlink(h);
    getchar();
}