2017-01-29 1 views
-1

누구나 왜이 항상 1 또는 0 이외의 다른 값에 대한 루프, 그리고 어떻게 내가 입력으로 문자를 제공하는 경우 무한 루프를 피할 수 있습니까? a!=0a!=1 모두 거짓 경우논리적 또는 C 프로그래밍 언어

#include <stdio.h> 

int a; 

main() 
{ 
    do 
{ 
    puts("Give 1 or 0 for input:"); 
    scanf("%d",&a); 
} while(a!=0 || a!=1); 

printf("\n%d",a); 
return 0; 

}

+0

귀하의 || && –

+0

1 또는 0과 비슷한 값을 보내 주시면 미안합니다. – bazuka

+0

나는 || a! = 1 half 또는 a! = 0 || 그것은 잘 작동합니다. – bazuka

답변

3

루프를 종료 할 수있는 유일한 방법입니다. 즉, a == 0a == 1이 동시에 만 종료 될 수 있습니다. 물론 불가능합니다. 따라서 루프가 끝나지 않습니다.

당신이 사용자 입력 1 또는 0는, 당신은 논리적이고이 운영자 필요로 할 때 종료 루프하려면 다음

do 
{ 
    puts("Give 1 or 0 for input:"); 
    scanf("%d",&a); 
} while(a!=0 && a!=1); 

그 외에를, 당신은 정말 scanf의 반환 값을 확인해야합니다 실패한 경우 입력 스트림을 제거하십시오. 문자를 입력하면 scanf은 실패했음을 의미하지만 문자는 입력 스트림에 남겨 둡니다. 이후의 반복은 그 캐릭터를 읽으려고 할 때 막힐 것입니다.

한 가지 방법은 scanf 그 자체와 %*s 형식 지정자를 사용하는 것입니다.

do 
{ 
    puts("Give 1 or 0 for input:"); 
    int read_res = scanf(" %d",&a); 
    if (read_res != 1) 
     scanf("%*s"); 
} while(a != 0 && a != 1); 

형식 문자열에 별표가 의미하는 scanf 여전히 비 공백 문자와 일치하고, 스트림에서 그들을 제거하지만, 아무것도로를 할당하지 않습니다 것입니다 (그래서 추가 매개 변수가 필요하지 않습니다). 또한 번호 앞의 선행 공백을 무시하기 위해 %d에 공백을 추가했습니다.

+1

수정하십시오. 'char '입력의 경우에는 다른 문제도 해결하십시오. –

+0

감사합니다. – bazuka