2016-12-27 2 views
3

이 코드가 &&와 작동하는 이유는 무엇입니까?||, C의 && 연산자

나는 그것이 ||이어야한다고 생각하지만 틀렸어. Choice은 동시에 2 값과 같을 수 없습니다.

선택 사항이 'a' 또는 'd' 일 때까지 사용자 입력을 요청해야하지만, 왜 &&을 작성해야합니까? 나는 그것을 얻지 않는다.

do 
{ 
    scanf("%c", &choice); 
} while (choice != 'a' && choice != 'd'); 

||을 사용하고 싶지만 작동하지 않습니다.

+2

_DeMorgan의 법률 _ [여기] (https://simple.wikipedia.org/wiki/Boolean_algebra)를 확인하십시오. – CristiFati

답변

6

아무 문제가 없습니다 연산자가 작동하는 방법을 보려면 코드의 논리를 확인해야합니다.

우선 while의 조건이 TRUE 인 한 do...while 루프가 작동합니다.

귀하의 경우에는 선택이 'a' 또는 'd' 일 때까지 사용자 입력을 요청해야합니다.

  • 그래서, 다른 방법으로, 한 사용자 입력이 ad 동일하지 않습니다, 당신은 루프에 필요합니다. 입력이 a 같지 않으면

  • 논리적으로, 그것은 여전히d 동일 할 수있다, 그래서 당신은이 사건을 모두 확인해야합니다. 이 없으며a 또는 d 인 경우에만 루프가 계속됩니다.

은 당신이 unequality을 확인하고, 평등을 확인하지 않는 기억하십시오. 부등식이 모두 충족되는 경우에만 while 조건 만 TRUE_으로 평가되고 계속 반복하여 새 값을 요청합니다.

요약하면 read DeMorgan's laws입니다.

+1

요점은 "부등식이 모두 충족되는 경우에만"입니다. – Yellowfun

5

||을 사용할 수 있습니다. "라인 브레이크의 변경 : 당신은

while (!(choice == 'a' || choice == 'd')); 

을 다음과 같이이가 AND & 또는

______ ___ ___ 
A || B = A && B 
______ ___ ___ 
A && B = A || B 

이로 기억에 영향을주지 방법 DeMorgan's Law, 단지 응용 프로그램의 while 루프 조건식을 변경해야 기호".

INPUT OUTPUT 1  OUTPUT 2 
A B NOT (A OR B) (NOT A) AND (NOT B) 
0 0   1     1 
0 1   0     0 
1 0   0     0 
1 1   0     0 

INPUT OUTPUT 1  OUTPUT 2 
A B NOT (A AND B) (NOT A) OR (NOT B) 
0 0   1    1 
0 1   1    1 
1 0   1    1 
1 1   0    0 
4

이 하나를 사용하여 조건을 대체 할 수

while (!(choice == 'a' || choice == 'd')); 

선택은 'A'또는 'D'를 같아 질 때까지이 상태 do-while 문이 실행됩니다 사용.

+0

이것은 다음과 같이 작동합니다 : while (! (choice == 'a'|| choice == 'd')); – Yellowfun

+0

당신의 조건은 나의 것과 같습니다. 뭐가 문제 야? –

+0

다른 괄호 쌍이 필요 – Yellowfun

3

안녕하세요. a와 b가 같지 않기를 바래서 작동하지 않습니다.

not equal to a and not equal to b 

so it will be !(eqaul to a or eqaul to b) (De morgan's) 

드 모건의 법칙은 단순히 그 적용 여기

not(a and b) = not (a) or not(b) 

말한다.

3

당신은을 사용하는 완 경우 또는 (||) 연산자, 당신은이 De Morgan's law 적용해야 :

의이 말을하자와 b 것은, 그래서

a || b <=> !a && !b 

a && b <=> !a || !b 

이 논리 값입니다

while (choice != 'a' && choice != 'd'); 

while !(choice == 'a' || choice == 'd'); 
과 동일합니다. 당신이 원하는 경우
5

나는 선택 '은'OR이 조건은 그래서

choice == 'a' || choice == 'd' 

처럼 쓸 수

'D'와 동일합니다 때까지 사용자의 입력을 요청해야 루프 것이라고 이 조건이 참이 될 때까지 당신이

do 
{ 
    //... 
} while (!(choice == 'a' || choice == 'd')); 

를 작성해야 또는 경우가

헤더를 포함하는 반복
#include <iso646.h> 

당신은

do 
{ 
    //... 
} while (not (choice == 'a' || choice == 'd')); 

또는

do 
{ 
    //... 
} while (not (choice == 'a' or choice == 'd')); 

도 같은

조건을 작성할 수 있습니다

!(choice == 'a' || choice == 'd') 

또는

not (choice == 'a' or choice == 'd') 
,

당신이해야합니다 차례로

(choice != 'a') && (choice != 'd') 

괄호는 따라서 생략 할 수 있습니다에 해당한다는

!(choice == 'a') && !(choice == 'd') 

또는

not (choice == 'a') and not (choice == 'd') 

에 해당

do 
{ 
    //... 
} while (choice != 'a' && choice != 'd'); 
+0

블라드 좋은 설명 주셔서 감사합니다! 나는 그것을 얻었다 고 생각한다. – Yellowfun

+0

@Yellowfun 아니요. 천만에요.:) –