有个题用while(scanf("%d%d",&a,&b)==2) 就能过但是改成while(scanf("%d%d",&a,&b)) 就超时。

这个scanf的返回值对时间上的消耗有什么影响啊?

scanf的返回值是读入的成功个数
scanf("%d%d",&a,&b)如果a和b都成功读入,那么scanf返回为2,如果屏幕输入,,两个逗号,那么
scanf返回为0
这样while(scanf("%d%d",&a,&b)==2)就是判断是否都正确读入数据,如果成功,scanf("%d%d",&a,&b)==2整个表达式就是1,在c程序里,1就是真,所以继续循环下去。当不能正确读入数据时候,整个表达式就是0,跳出循环
但是如果用while(scanf("%d%d",&a,&b)) ,如果scanf("%d%d",&a,&b)返回值是1也可以继续循环,例如输入12,这样a正确读入为12,,(逗号)不能读入进来,这样b是失败的,scanf返回值是1,满足循环条件,所以继续执行,貌似出现死循环现象。追问

那么while(cin>>a>>b)呢。

追答

cin读取的话,遇到结束符(包括空白符)会终止,只读取空白符之前的部分

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-24
scanf("%d",&a); 如果成功读取一次 返回1
scanf("%d%d",&a,&b);执行后返回2
如果你后边加了==2 就是一个判断条件。。
如果没加 则表示 scanf("%d%d",&a,&b) 永远为真,所以只要有两个数读入 就会循环

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网