不在c中显示字符链表

时间:2014-10-15 18:15:12

标签: c

程序是关于合并两个具有字符信息的已排序链表。还应该对列表进行排序。但是我的显示功能不打印字符链表。函数在main中被调用但字符没有被打印。

struct node
{
    char info;
    struct node *link;
};
typedef struct node *NODE;


void Insert(NODE, char);
void Display(NODE);
NODE getNode();
int main()
{
    int num, i, c1, c2;
    char item;
    NODE head1, head2, head3;
    NODE temp1, temp2;
    head1=getNode();
    head2=getNode();
    head3=getNode();
    printf("First List:\n");
    printf("Enter the number of elements: ");
    scanf ("%d", &num);
    printf ("Enter the elements in sorted order:\n");
    for (i=0; i<num; i++)
    {
        scanf("%c", &item);
        getchar();

        Insert(head1, item);
    }
    printf("Second List:\n");
    printf("Enter the number of elements: ");
    scanf ("%d", &num);
    printf ("Enter the elements in sorted order:\n");
    for (i=0; i<num; i++)
    {
        scanf("%c", &item);
        getchar();
        Insert(head2, item);
    }
    temp1=head1->link;
    temp2=head2->link;
    while (temp1!=NULL&&temp2!=NULL)
    {
        c1=(int)temp1->info;
        c2=(int)temp2->info;
        if (c1<c2)
        {
            Insert(head3, temp1->info);
            temp1=temp1->link;
        }
        else
        {
            Insert (head3, temp2->info);
            temp2=temp2->link;
        }
    }
    while (temp1!=NULL)
    {
        Insert(head3, temp1->info);
        temp1=temp1->link;
    }
    while (temp2!=NULL)
    {
        Insert (head3, temp2->info);
        temp2=temp2->link;
    }

    Display(head3);
    return 0;
}

void Insert (NODE head, char item)
{
    NODE temp = getNode();
    NODE p;
    temp->info=item;
    temp->link=NULL;

    if (head->link==NULL)
        head->link=temp;

    else
    {
        p=head->link;
        while(p->link!=NULL)
            p=p->link;
        p->link=temp;
    }
}


void Display(NODE head)
{
    NODE temp;
    temp=head->link;
    if (head->link==NULL)
        printf("The list is empty.\n");
    else
    {
        printf("The joined list is:\n");
        while (temp!=NULL)
        {
            printf("%c \t",temp->info);
            temp=temp->link;
        }
        printf("\n");
    }
}

NODE getNode()
{
    NODE temp;
    temp=(NODE) malloc(sizeof(struct node));
    temp->link=NULL;
    return temp;
}

1 个答案:

答案 0 :(得分:0)

%c之前的scanf(...)添加一个空格,用于读取字符

scanf(" %c", &item);

问题在于,%c不会像%f%d.

这样的数字格式跳过空白区域