任意输入几个字符,按了回车键后,系统只是光标换行,没有输出任何东西。

编写程序,从键盘输入一行字符,且每个字符存入一个结点,调用函数输入顺序建立一个链表,然后输出并释放全部结点#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct List{
     char ch;
     List *next;
};
struct List *creat()
{
    List *head,*p1,*p2;
    char n;
    int i=0;
    head=NULL;
    printf("输入字符串:\n");
    n=getchar();
    while(n!='\n');
    {
        p1=(List *)malloc(sizeof(List));
        p1->ch=n;
        if(i==0)
        {
            i++;
            head=p1;
        }
        else 
            p2->next=p1;
        p2=p1;
            n=getchar();
    }
    p2->next=NULL;
    printf("字符串已完全存入链表\n");
    return (head);
}
int main()
{
    List *head,*p1,*p2;
    char n;
    head=creat();
    printf("输入的字符串为:\n");
    n=getchar();
    free(p1);
    return 0;
}
 

修改如下,供参考:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct List{
     char ch;
     List *next;
};

struct List *creat()
{
    List *head,*p1,*p2;
    char n;
    int i=0;
    head=NULL;
    printf("输入字符串:\n");
                                   //n=getchar();
    while((n=getchar()) && n!='\n')//;
    {
        p1=(List *)malloc(sizeof(List));
        p1->ch=n;
        if(i==0)
        {
            i++;
            head=p1;
        }
        else
            p2->next=p1;
        p2=p1;
                                  //n=getchar();
    }
    p2->next=NULL;
    printf("字符串已完全存入链表\n");
    return (head);
}

void print(struct List *head)//输出链表
{
     struct List *p;
     if(head==NULL) return;
     p = head;
     while(p){
           printf("%c ",p->ch);
           p = p->next;
     }
     printf("\n");
}

void del(struct List *&head)//释放链表结点
{
    if(head != NULL){
       del(head->next);
       free(head);
    }
    head = NULL;
}

int main()
{
    List *head;          //*p1,*p2;
                         //char n;
    head=creat();
    printf("输入的字符串为:\n");
    print(head);
                        //n=getchar();
                        //free(p1);
    printf("释放全部结点:\n");
    del(head);
    print(head);
    
    return 0;
}