루프를 종료 할 수있는 유일한 방법입니다. 즉, a == 0
과 a == 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 또는 0과 비슷한 값을 보내 주시면 미안합니다. – bazuka
나는 || a! = 1 half 또는 a! = 0 || 그것은 잘 작동합니다. – bazuka