2014-11-01 3 views
1

와 scanf와 나는 오늘이 코드 조각을보고있는 동안 : 값 (X 또는 Y)의 일부에 해당하면 내가 이해 한 바로는부울 연산자

while(scanf("%d %d",&x,&y),x||y) 
{ 
    .... 

, 그것은 루프에 들어갑니다. scanf docs 이후

는 말한다 :

성공

이 함수가 성공적으로 작성 인수 목록의 항목 수를 반환합니다. 이 수는 항목의 예상 수와 일치하거나 일치하는 실패, 읽음 오류 또는 파일 끝 도달으로 인해 0보다 작을 수 있습니다. 작품, 두 번째는 실패하면서

while(scanf("%d %d",&x,&y) >= 1) 
{ 
    .... 

그러나 online programming challenge site 1 일에 :

나는에 코드를 다시 작성했다.

내 가정에 맞습니까? 이 두 코드 간의 차이점은 무엇입니까?

(나는 C에서 테스트했기 때문에 나는, C++로 태그하고 ++ 4.8.2 - GNU C++ 컴파일러)

답변

3

scanf이 일치하는 인수의 수를 반환하지만 첫 번째 코드 조각은 그 결과 그냥 검사를 던졌습니다 x 또는 y이 참인지 확인하십시오. 두 번째 조각은 값에 관계없이 적어도 하나의 정수와 일치한다는 것을 반환합니다.

입력 "0 0"을 고려하십시오. 첫 번째 경우 scanf()은 2를 반환하지만 x || yfalse을 반환합니다. 두 번째 경우 조건은 true입니다.

+0

정확히 그 경우입니다. 좋은 캐치 –

0

첫번째 코드 x||y 결과를 while 준다이

하지만, 두 번째 코드 scanf1의 반환 값을 비교하여 정확하고 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; 
}