| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 846 人关注过本帖
标题:scanf 无法使用?
只看楼主 加入收藏
ldzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:64
专家分:339
注 册:2012-7-30
收藏
得分:0 
回复 9楼 PlusA2T
第十楼已经讲得差不多了。我补充一个,有关printf(),scanf()要有输入输出缓冲区的概念。当scanf()未能读取指定形式的输入时,它就留下这个不相容的输入,以供下次读取(抄书,)。 while(getchar()!='\n')continue;跳过输入行剩余部分。

[ 本帖最后由 ldzy 于 2012-9-25 16:39 编辑 ]
2012-09-25 16:36
PlusA2T
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-9-23
收藏
得分:0 
以下是引用heishu在2012-9-25 09:20:43的发言:

OK = scanf("%f", &height);首先我想这句语句的意思是:函数输入正确返回为1负给ok,输入不正确返回0给ok;
所以输入字符是,ok被负0;函数无限循环执行 else {
            printf("\nDon't trick me, Again(in Meters):");
            OK = scanf("%f", &height);
        }
这条语句。而且这句不执行OK = scanf("%f", &height);

不太明白…
请问 Ok 被负 0 是甚么意思?在甚么条件下才会令函数无限循环执行


以下是引用ldzy在2012-9-25 16:36:32的发言:

第十楼已经讲得差不多了。我补充一个,有关printf(),scanf()要有输入输出缓冲区的概念。当scanf()未能读取指定形式的输入时,它就留下这个不相容的输入,以供下次读取(抄书,)。 while(getchar()!='\n')continue;跳过输入行剩余部分。

第一个点明白了…所以第一次要的东西就放进变数里,不要就放在缓冲里,有用的时侯就会拿出来,是吧?
但是“跳过输入行剩余的部分”又是甚么意思?
我只理解到…如果用户不按回车,那就不会让程式继续走下去
2012-09-27 01:01
ldzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:64
专家分:339
注 册:2012-7-30
收藏
得分:0 
回复 12楼 PlusA2T
跳过输入行的剩余部分是指 将上次按下回车后scanf()取完它要的字符后,输入缓冲区剩余的字符。如果scanf()直接取失败了,你键入的所有字符都是这部分,在缓冲区中。若没有缓冲区没做处理,下一次scanf()还从失败的地方取,于是一直失败下去。。。大致就是酱紫。找找输入缓冲区之类的看看,应该就能明白了。
上面那个负 指的应该是把scanf()的返回值赋值给变量ok吧。
2012-09-27 17:02
快速回复:scanf 无法使用?
数据加载中...
 
   



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

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