문제

#include<iostream>
using namespace std;

int main()
{

    char again;
    do
    {
        cout<<"you are in the while loop";
        cout<<"do you want to continue looping?";
        cin>>again;
    } while (again != 'n' || again != 'N');

    system("pause");
    return 0;
}

나는 'While'의 테스트 조건에 문제가 있다는 것을 알고 있습니다. 그러나 나는 그것을 알아낼 수 없다.

사용자의 입력이 'n'이나 'n'이 아닌 경우 루프는 코드를 계속 인쇄해야합니다. 'n'또는 'n'을 눌렀을 때 프로그램이 종료됩니다.

그러나 내 코드의 경우 프로그램은 내가 입력 한 문자에 관계없이 코드를 계속 반복합니다. 그러나 내가 '||'를 바꿀 때 '&&'로, 프로그램은 원하는대로 실행할 수 있습니다. 누구든지 무슨 일이 일어나고 있는지 말해 줄 수 있습니까?

도움이 되었습니까?

해결책

이것은 일반적인 부울 논리 질문입니다. || "또는,"를 의미합니다. "이것의 한쪽이 사실이면 표현이 참입니다." 그래서 당신이 대문자를 통과 할 때 'N' 에게 c != 'n' || c != 'N' 이 프로그램은 "음, 'N' 동일하지 않습니다 'n', 그러므로 표현의 한쪽은 사실이므로 전체 표현이 사실이며 표현의 나머지 부분을 확인할 필요가 없습니다. " 'n', 프로그램은 "음, 'n' 와 동등하다 'n', 그러나 그것은 동일하지 않습니다 'N', 그러므로 표현의 한쪽은 사실이므로 전체 표현은 사실입니다. "이것은 당신의 While 루프에서 일어나는 일입니다.

반면에, && "표현의 양면이 사실이어야한다"는 의미 "및"이 의미가 있어야한다 "; 대문자를 통과 할 때 'N' 에게 c != 'n' && c != 'N' 이 프로그램은 생각한다 "'N' 동일하지 않습니다 'n', 그러나 그것은 동일합니다 'N', 따라서 표현의 한쪽만이 사실이므로 표현은 거짓입니다. "

입력 한 캐릭터가 당신이 사용할 특정 값과 같았는지 테스트하는 경우 테스트 중이기 때문에 혼란스러워합니다. || (예 : "나는 알고 싶다 'a' 또는 'b' 또는 'c' ").

기본적으로 사용할 때 || 특정 표현을 위해, 당신은 그 표현의 반대를 원한다면 당신은 && (예 : 나는 아무것도 원하지 않습니다 'a', 'b' 또는 'c'; 또는 다른 방법으로 말하면 가치는 'a' 그리고 있을 수없는 일이야 'b', 그리고 있을 수없는 일이야 'c'"). 마찬가지로, 당신이 사용한다면 && 특정 표현을 위해서는 그 표현의 반대를 원한다면 사용해야합니다. ||. 이것은 De Morgan의 법칙 중 하나입니다.이 법은 각각을 읽는 것이 좋습니다.

다른 팁

예 : || "또는"및 && is "및"입니다.

모든 캐릭터입니다 어느 하나 "N'N '"또는 "NOT'N '"은 가능할 수 없기 때문입니다. 둘 다 'n'과 'n'은 동시에.

조건을 작성하는 또 다른 (읽기가 더 간단한) 방법은 다음과 같습니다.

!(again == 'n' || again == 'N')

그것은 "반대입니다 (다시 어느 하나 'n'또는 'n') ".

"부울 대수입니다."드 모건의 법칙".

Not (P And Q) = (Not P) Or (Not Q)
Not (P Or Q) = (Not P) And (Not Q)

귀하의 경우 사용자가 입력하지 않기를 원합니다. 'n' 또는 'N',이 논리로 번역 될 수 있습니다.

!(again == 'n' || again == 'N')

De Morgan의 법칙을 적용 할 때

(again != 'n' && again != 'N')

자세한 내용은 읽을 수 있습니다 제안 논리

원래 포스터는 지금 행복하지만 다른 답변에서는 이것을 보지 못했습니다.

(true  && true ) == true
(true  && false) == false
(false && true ) == false
(false && false) == false

(true  || true ) == true
(true  || false) == true
(false || true ) == true
(false || false) == false

!true  == false
!false == true

그게 다야!

나는 당신의 문제를 잘 이해하고 설명은 다음과 같습니다.

do-while 루프는 출구 조건 루프입니다. 이것은 루프의 본문이 항상 먼저 실행된다는 것을 의미합니다. 그런 다음 테스트 조건이 평가됩니다. 테스트 조건이 참이면 프로그램은 루프 본문을 다시 실행합니다. 테스트 조건이 False 인 경우 루프는 종료되고 프로그램 실행은 다음에 다음과 같은 명령문으로 계속됩니다.

코드에서 ''또는 '' '를 누를 때 테스트 조건은 항상 하나의 사실이고 하나는 거짓이되므로 사용하면 || 테스트 조건 (true || false = true)을 만족 시키므로 프로그램이 루프의 본문을 다시 실행합니다. 그러나 &&를 사용하면 (true && false = false)를 제공하면 테스트 조건이 더 이상 통계되지 않으므로 프로그램은 루프 본문을 다시 실행하지 않습니다.

도움이되기를 바랍니다 ..... 프로그래밍을 즐기십시오! Ameraradi

&&는 논리적이며. || 논리적이거나.

(또한, & 조금씩, 그리고 | |는 약간 또는.)

당신은 시도하고 싶을 수도 있습니다 (! (다시 == 'n'|| 다시 == 'n')

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top