免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2165 | 回复: 6
打印 上一主题 下一主题

哪位大侠帮忙看下简单程序错在哪里 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-07 17:51 |只看该作者 |倒序浏览
#include <stdio.h>
#include <stdlib.h>

typedef int datatype;

typedef struct node
{
        datatype data;
        struct node *next;
}linknode;

linknode *create(void)
{
        datatype ch;
        linknode *head;
        linknode *p;
        head=NULL;
        scanf("%d",&ch);
        while(ch!='\n')
        {
                p=(linknode *)malloc(sizeof(linknode));
                p->data=ch;
                p->next=head;
                head=p;
                scanf("%d",&ch);
        }
        return head;
}

void main()
{
        linknode *cc=create();
        do
        {
                printf("%d\n",cc->data);
                cc=cc->next;
        }while(cc!=NULL);

        printf("\n");
       
}


貌似跳不出去循环,一直要输入,不明白问什么,

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
2 [报告]
发表于 2010-09-07 18:04 |只看该作者
输入10不行吗。。

论坛徽章:
0
3 [报告]
发表于 2010-09-07 18:41 |只看该作者
scanf("%d", &ch)永远取不到‘\n',循环自然永远也跳不出来了

论坛徽章:
0
4 [报告]
发表于 2010-09-07 18:42 |只看该作者
scanf("%d",&ch);
后面再加一个scanf,需要再定义一个变量,后面的scanf用来接收前面的scanf丢掉的\n

论坛徽章:
0
5 [报告]
发表于 2010-09-07 18:44 |只看该作者
本帖最后由 liwangli1983 于 2010-09-07 18:49 编辑

scanf其实是个挺复杂挺危险的函数,没弄明白它的工作原理前要慎用……

另外用判断是否为'\n'的办法判断结束好像也不太合适,因为标准输入是行缓冲的,输入完一个数要回车确认才能把数据刷到请求的进程中,所以每次输入都必然会跟随一个'\n',所以就算解决了扫描'\n'的问题,那么按现有的程序只输入一次循环就结束了

论坛徽章:
0
6 [报告]
发表于 2010-09-07 19:02 |只看该作者
最好别用scanf,比较恶心的东西,并且按这个程序现在的逻辑解决了回车的问题也会有新的问题,
比如只输入一个数字然后就回车,还有最后一次的输入如何取得.

论坛徽章:
0
7 [报告]
发表于 2010-09-07 21:23 |只看该作者
代码写的太乱了。。。
do while{}...
要是内存申请不成功呢?
data还指向栈。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP