| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11074 人关注过本帖
标题:while(~scanf("%d",&n))
只看楼主 加入收藏
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
结帖率:25%
收藏
 问题点数:0 回复次数:8 
while(~scanf("%d",&n))
这个代表什么意思呢?
2015-04-02 11:38
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
可能输入数字退出循环吧

一片落叶掉进了回忆的流年。
2015-04-02 12:54
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
scanf()函数返回成功赋值的数据项数,出错时则返回EOF(-1)
也就是说scanf返回值的取值范围是大于等于-1的整数
只有返回值为EOF时 其取反的的值 即while循环的判断条件才为0 才能结束循环
其它输入情况下(无论是否输入成功) while循环的判断条件为非0 即为真
楼主给出的程序是很不严谨的 一但输入的值为字母符号之类的
scanf赋值不成功把读到的内容又返回到stdin的缓冲区
假设这个被吐回的值为t
由于scanf返回的值不是EOF而是其它非负整数
其取反得到的值使while又进入到下一次循环
scanf又从stdin缓冲区里读到了原先吐回的t
往返如此成了死循环……

楼主的代码要想执行成功只有这样操作
输入个int类型的值后再回车
接着可多次如上操作 想结束输入时
再人为制造个EOF(ctrl+z/d)
再回车使while循环条件为假结束循环
这时n的取值为最后一次成功读取到的int型数值

总得来看这是个很不可取的赋值语句
建议这样来写更易控制

while((scanf("%d", &n)) != 1) while(getchar() != '\n');

Only the Code Tells the Truth             K.I.S.S
2015-04-02 14:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这是有直接代码不写要写晦涩代码的典型,还是属于取巧不成反添漏的一种。其实观察多天,楼主发问基本上是不回报别人应答的,自管自问问题,让你费神解释了。

授人以渔,不授人以鱼。
2015-04-02 14:20
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
收藏
得分:0 
回复 4楼 TonyDeng
抱歉哈,其实想明天放假后用电脑统一回复,用手机不好回复。
2015-04-02 16:02
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
收藏
得分:0 
回复 3楼 longwu9t
嗯,看到很多ACMer解题都用这个。
2015-04-02 16:03
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
收藏
得分:0 
回复 3楼 longwu9t
EOF的值是-1是么?
2015-04-06 14:52
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
收藏
得分:0 
回复 3楼 longwu9t
或者这样写行不行?
while (scanf("%d", &n)!=EOF)
2015-04-06 14:53
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 8楼 msl12
楼上两个都没玩过ACM。在ACMer看来那是种很自然的写法。

所谓的可读性是有选择性的,只适合它所面向的人群。Hello World拿给压根不知编程为何物的人看那也是天书。

重剑无锋,大巧不工
2015-04-06 15:14
快速回复:while(~scanf("%d",&n))
数据加载中...
 
   



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

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