if문 기초 질문가능할까요?

조회수 1000회
int main() {
    int num;
    printf("수입력:");
    scanf("%d", &num);

    if (num++) {printf("%d", num);}

if문에서 if 다음 ()안은 조건이 들어가고 그 조건이 참이면 중괄호의 문장이 실행된다고 배웠는데 위 문장처럼 ()안에 후위 증감연산자나 복합연산자같은 참 거짓을 따질 수 없는 문장이 들어가면 어떤 식으로 되는 건가요?

혹시 컴파일러(?)는 0이 아닌 수를 참으로 인식한다고 알고 있는데 ()안에 0이 아닌수가 입력되면 무조건 중괄호 안에 문장이 실행되는 건가요?

이건거 같긴한데 맞다고 확인받을 곳이 없어서요 답변해주시면 감사하겟습니다

2 답변

  • num++은 num의 사본을 복사해 두고, num을 1증가시킨후에 복사해둔 사본을 그 위치로 반환합니다.

    즉, 만약 num의 값이 3일 때, if(num++)을 하게 되면 num은 4가되고 if문은 if(3)으로 평가됩니다.

    if문은 괄호안에 숫자나 포인터를 넣을수 있는데, 숫자를 넣게되면 if(num)은 if(num!=0)과 같은 뜻이고, if(pointer)인 경우는 if(pointer!=NULL)과 같은 뜻입니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • if 조건문은 기본적으로 true, false에 의해서 동작하게 되는데 질문자님의 경우처럼 숫자를 넣을 경우 기본적으로 int값이 0일 때는 false로 동작하고 1일 때는 true로 동작하게 됩니다. 추가적으로 0이 아닌 즉 1보다 큰 경우에는 true로 동작하기 때문에 num값을 0으로 할당할 시 조건문 동작 후 num을 1증가시키기 때문에 통과하지 않습니다. (추가/ ++num 으로 변경할 경우 0을 넣어도 1을 증가시키고 조건문 동작하기 때문에 통과합니다.)

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

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

(ಠ_ಠ)
(ಠ‿ಠ)