我今天看到了这段代码:
while(scanf("%d %d",&x,&y),x||y)
{
....
根据我的理解,如果某些值(x或y)为真,它就会进入循环。
由于scanf docs说:
成功时,该函数返回参数的项数 列表已成功填写。此计数可以匹配预期的数量 由于匹配失败,读数,项目或更少(甚至为零) 错误,或文件结尾的范围。
我已将代码重写为:
while(scanf("%d %d",&x,&y) >= 1)
{
....
但是online programming challenge site第一次有效时,第二次失败。
我对我的假设是否正确?这两段代码之间有什么区别?
(我标记为C ++,因为我已在C ++ 4.8.2中测试过 - GNU C ++编译器)
答案 0 :(得分:3)
scanf
返回它匹配的参数数量,但第一个代码片段抛出该结果,只是检查x
或y
是否为真。第二个片段返回您匹配的至少一个整数,无论其值如何。
考虑输入"0 0"
。在第一种情况下,scanf()
返回2,但x || y
返回false
。在第二种情况下,您的条件为true
。
答案 1 :(得分:0)
第一个代码为while
提供x||y
的结果,这是正确的
但是,第二个代码会比较scanf
和1
的返回值,然后给出while
比较结果。
运行此代码,你就会清楚。
#include<stdlib.h>
#include<iostream>
using namespace std;
int main()
{
int x, y;
cout<<(scanf("%d %d", &x, &y), x||y)<<endl;
cout<<(scanf("%d %d", &x, &y))<<endl;
return 0;
}