C语言的单链表问题,关于输入问题如何停止的问题!

/*请看创建函数部分,问题在有问题的代码行有注释!请知道的朋友讲解下嘛!*/#include<stdio.h>#include<stdlib.h>typedefstruc... /*请看创建函数部分,问题在有问题的代码行有注释!请知道的朋友讲解下嘛!*/
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int a;
node *next;
}lnode,*linklist;
linklist create_linklist() //创建链表
{
linklist L;
lnode *s;
char ch;
L=(linklist)malloc(sizeof(lnode));
L->next=NULL;
s=L;
printf("input some mumber,please!\n");
scanf("%d",&i);
while(i!=flag) /*这个地方如何处理呢,我看书上说设置个flag,但是这种情况下整型的如何判断是不是输入的结束来判断呢?如何处理呢?实在没弄懂,书上说的也很模糊!请知道的告诉一下吧!*/
{
s->next->a=i;
ch=i;
s=s->next;
scanf("%d",&i);

}
s->next=NULL;
return L;
}
void display(lnode *L) //显示链表
{
printf("The mumber are:");
while(L->next!=NULL)
{
printf("%d",L->a);
L=L->next;
}
printf("/n");
}
int main()
{
lnode *s;
s=create_linklist();
display(s);
return 0;
}
展开
 我来答
yulei857
2014-07-27
知道答主
回答量:13
采纳率:0%
帮助的人:12.9万
展开全部

首先 你的结构体定义就有问题,应该将里面的

  • typedef struct node
    {
    int data;
    struct node *next; //这里应该加上个struct ,node 是标签,但要和struct 连用才可以

        }lnode,*linklist;

如果你只是为了创建链表然后输出链表内容这样就可以了 在你源码基础上修改的

linklist create_linklist()      //创建链表
{
linklist head , p , q ;
int ch;


head=(linklist)malloc(sizeof(lnode));//创建头结点,具体的现实意义自己去翻下书吧。
if( head == NULL )

{

    exit(0);

}

head->next=NULL;

q = head;//q指向head

while(  scanf("%d" , &ch) == 1 && ch !=  0 )//输入0结束

{

    p = (linklist)malloc(sizeof(lnode));

    if( p == NULL )//申请失败是会返回NULL指针 , 这里要检查一下

    {

        exit(0)

    }

    p->data = ch;

    p->next = q->next; //==NULL

    q->next = p;//q->next指向p

    q = p;

return head;

}


display是对的 , 但是看你结构体用的不是很熟练,typedef估计也没弄清楚意思,还有指针也没怎么明白,你的creatlist中的好多变量之前都没有声明就开始用了。断定你是c新手,我比你老不到哪去。不管你基础如何 建议你看看《c和指针》这本书关于指针和结构体的内容 , 讲解的很清除,花时间去啃多看 看个十几遍就会了 然后要敲代码 。希望对你有帮助

百度网友96ffcf7
2015-08-15 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118726
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部

输入停止代码:

void freelist(book_info * book_info_head ,user_info * user_info_head)
{
    if(user_info_head->next==NULL) free(user_info_head);
    else
    {
        user_info * p1,* p2;/*释放用户信息链表*/
        p1=user_info_head->next;
        p2=user_info_head;
        while(p1!=NULL)
        {
            free(p2);
            p2=p1;
            p1=p1->next;
        }
    }
     
    if(book_info_head->next==NULL) free(book_info_head);
    else
    {
        book_info * p3,* p4;/*释放图书信息链表*/
        p3=book_info_head->next;
        p4=book_info_head;
        while(p3!=NULL)
        {
            free(p4);
            p4=p3;
            p3=p3->next;
        }
    }
}

   

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2014-07-27 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6489万
展开全部
你的flag变量没有定义,不能使用啊

如果想在输入某个特殊数据结束创建的话,可以定义一个flag为这个值。

如果输入的整数可能是任意值,则判断结束就不能这样了,只能通过scanf("%d",&i)的返回值来判断了,如果输入的是有效整数,则scanf()会返回1,否则会返回0,如:输入一个字母就会结束输入!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式