| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2165 人关注过本帖, 4 人收藏
标题:詳解鏈表
只看楼主 加入收藏
取消关键字高亮
awisre
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-8-2
收藏
得分:0 
写的清楚,学习了~
2015-08-03 14:33
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
我得好好来消化一下,繁体字换成现在在使用的文字就好了
2015-08-03 15:53
awisre
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-8-2
收藏
得分:0 
回复 22楼 列车永不停息
为什么我看起来一点难度都没啊。。。而且从来没学过繁体
2015-08-04 15:31
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
T版,这个函数我看不懂啊,
首先,先把函数打出来:

int GetInt(void)//从控制台键盘读入一个int型数据
{
    int value = 0;
    do
    {
        value = 0;
        printf("請輸入一個整數: ");
        fflush(stdin);//清除缓冲区
    } while (scanf("%d", &value)!= 1);//当等于1的时候跳出来吗?
    return value;
}

第一个问题:while (scanf("%d", &value)!= 1);,这个语句难道不是当value的值不等于1的时候继续执行吗?为什么只是需要输入一次就跳出来了?我去改变了一下,把scanf语句独立出来,把while语句变成了这样“while (value!= 1);”结果输入0的时候也跳不出来。。。我觉得在这里面我有个知识盲点在里面,导致我理解错了。

第二个问题:这里的int GetInt(void)返回value,然而value又不是数组,只能包含一个值,那么为什么要while循环?在GetInt函数里面,我改成这样如下那样,好像也能运行。为什么要那样复杂呢?

int GetInt(void)//从控制台键盘读入一个int型数据
{
    int value ;
     printf("請輸入一個整數: ");
    scanf("%d", &value);
    return value;
}

还望你能教我。
2015-08-06 18:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
scanf()函数族,即包括fscanf()、sscanf()、scanf_s()等,其返回值是成功读取的项数。比如scanf("%d%d", &x, &y),试图读取2项数据,但实际上由于各种原因(最典型是用户输入可能不合要求),造成实际操作成功少于2项,如只读到1个x,y读不成功(输入了字母无法转换为数值),那么函数的返回值就是1,当成功完成全部任务时,它的返回值应是2,此时表示操作百分百正确。我的循环while(scanf("%d", &value) != 1),就是当且仅当scanf()函数成功读取了1个整数时才结束循环,此时读取失败的返回值是0。

之所以要写这个函数,是因为程序要求用户输入整数,而他可能不会那么老实,这时就反复循环强制他输入正确为止,否则程序不会往下继续执行。很多初学者写程序,以为写了一个scanf(),用户就会输入正确,那是想当然,那不过是由于程序是你自己写的、自己知道规避错误,但若是交给用户实用的程序,这样就是漏洞,因为那时用户就算输入了垃圾数据,你的程序也照往下执行,那就是经常运行时莫名其妙崩溃的原因。

另外,良好的编程方式,当人机交互输入时,最好只用1项scanf(),此时代码可以即时监测是哪一项输入不正确,从而有针对性地反应。见过有人用scanf()一气接收10多项数据的,那是没实践经验的表现,肯定是从来没遇到过现实输入千奇百怪而需要追踪哪项数据出错情形的。你一项一项逐个输入、逐个提示,那么错在哪信息也很明确,不用乱猜。现实的经验其实是:不要以为把代码写得很短、很紧凑是本事,那往往是不实用的,切身处地站在用户的角度去审查自己的程序,这是首先要培养的世界观。你说改了测试能通过,就是没有想到输入字母等数字之外的东西来测试,自然不知道这段代码应对什么问题。

授人以渔,不授人以鱼。
2015-08-07 03:10
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 25楼 TonyDeng
好棒,受教了,受教了。我确实没有去想到驱使输入其他数字以外的字符。对于scanf函数族的知识盲点我也认识到了。
2015-08-07 15:11
快速回复:詳解鏈表
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018177 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved