c언어 if else문 질문

조회수 453회

이 문제는 정수 3개를 입력하고 각각의 정수가 짝수인지 홀수인지 나타내는 문제입니다.

 int a, b,c;

    scanf_s("%d%d%d", &a,&b,&c);

    if (a % 2 == 0)
    {
        printf("%s\n", "even");
    }

    else if (a % 2 == 1)
    {
        printf("%s\n", "odd");
    }
    else if (b % 2 == 0)
    {
        printf("%s\n", "even");
    }
    else if (b % 2 == 1)
    {
        printf("%s\n", "odd");
    }
    else if (c % 2 == 0)
    {
        printf("%s\n", "even");
    }
    else
    {
        printf("%s\n", "odd");
    }//

일단 이 문제를 풀긴했습니다. if...else if...else가 아니라 if else, if else, if else 이렇게 a, b, c 하나씩 선언을 해주면 풀리더라고요. 제가 아직 if문을 이해를 못한건지....왜 차이가 나는건가요???? 둘이 쓰는 방식만 다르지 똑같은 말아닌가요??

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 네 다릅니다.

    대략적인 구조를 보자면

    if (){
        // 실행
    }
    else if () {
        // 실행
    }
    // else if 블록들이 여러 개 존재할 수 있음
    else{
        // 실행
    }
    
    

    첫 if 문에서 주어진 조건이 참인지를 확인합니다. 참일 경우 해당 if block 안의 코드들을 수행하고 if문은 끝납니다.

    else if 문은 바로 위의 if(혹은 else if)문의 조건이 거짓일 경우 주어진 조건이 참인지를 확인하고, 참일 경우 해당 블록 안의 코드들을 수행하고 또 if문을 종료합니다.

    마지막 else의 경우 위의 if와 else if에서 확인했던 모든 조건들이 거짓을 경우에 코드를 실행합니다.

    따라서 올려주신 코드와 같이 if와 else if들로 조건들을 만들어 놓으실 경우 저 모든 블록들 중에서 단 하나만 실행되게 됩니다.

    if ~ else ~를 여러 개 쓰는 것은 각 if문의 조건을 별개로 생각한다는 뜻입니다.

    if ~ else ~을 실행하고 나서, if와 else 중 어떤 것을 수행했는지 여부와 관계 없이 새롭게 조건을 확인합니다.

    길게 설명했지만, 올려주신 문제에 적용해 보자면

    올려주신 코드에서 a는 짝수이거나 홀수일 것이고, 그 경우 첫 두 print문 중 하나만 실행하고 아래의 조건들은 아예 확인하지 않고 끝나버립니다.

    왜냐면 else if는 위의 모든 조건들이 다 거짓일 경우에 조건을 확인하는 작업을 수행하니까요

    따라서 a가 짝수인지 홀수인지 확인하는 print문만 실행하는 것입니다.

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

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

(ಠ_ಠ)
(ಠ‿ಠ)