C || 논리식 이후 변수값이 이상함.

조회수 441회
#include<stdio.h>
int main()
{
    int a,b,c;
    a=1;
    b=2;
    c=3;
    printf("%d",(a=b)||(b=c));
    printf("%d",b);

}

여기서 abc를 출력할때 a=2,b=2,c=3이라고 출력되는데 a에는 b가 들어가고 b에는 c가 들어가니 a=2,b=3,c=3으로 출력되는게 맞지않나요 ? 어디가 문제인지 알려주세요

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기
        printf("%d",(a=b)||(b=c));
    

    여기에서 a=b 까지만 진행하고, b=c 를 하지 않을 거에요.

    condA || condB 라는 논리식을 평가할 때, condA이라면, condB는 평가해 볼 필요도 없이 전체 식이 이 됩니다. 그래서 a=b으로 평가되었기에, b=c 는 안하고 끝나요.

    이와 반대로 condA && condB 라는 논리식이 있고, condA가 참이라면, 다음 논리식도 참인지 확인하기 위해 condB 까지 평가해 보게 됩니다. 그래서 코드에서 이 부분을

        printf("%d",(a=b)&&(b=c));
    

    로 바꾸고 실행해 보면, a, b, c 변수의 마지막 결과가 달라지는 걸 확인할 수 있을 겁니다.

    • 정말 감사합니다!군대에서 독학하면서 하는지라 어디에 물어볼곳이 없었는데 바로 이해했습니다ㅎㅎ질문하는 방식에 대해선 보기좋게 고치겠습니다 윤용호 2021.8.3 22:27

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)