본문 바로가기

C 언어

반복문 종료 조건 (논리 연산자 &&와 ||의 차이)

while 반복문을 가지고 어떤 문자를 반복해서 입력한다고 가정하자.

사용자가 계속 문자를 입력하다가 while문을 종료하고 싶으면 'Q', 'q' 를 입력하면 프로그램이 종료하도록 구현하고 싶다.그렇다면, 두 코드 중 어떤 코드가 올바르게 작동할까? 몇번인지 맞춰보도록 하자. 

//1번
while (isExit != 'q' && isExit != 'Q') {
        printf("문자 입력 ('Q', 'q' 입력 시 종료): ");
        isExit = getchar(); // 사용자로부터 문자 입력 받기
        num++;
       }
        

//2번
while (isExit != 'q' || isExit != 'Q') {
        printf("문자 입력 ('Q', 'q' 입력 시 종료): ");
        isExit = getchar(); // 사용자로부터 문자 입력 받기
        num++;
       }

 

.

.

.

.

.

정답은 1번이다. 

만약 2번을 선택했다면, 'q' 또는 'Q' 를 입력할경우 while문을 종료되기를 기대했을 것이다. 

그렇지만 왜 틀렸는지 설명해보겠다. 

 

OR 연산자 사용했을 때 

-> 하나라도 참이면 OR 연산자는 전체가 참이 되기 때문에 반복문이 계속 실행

while(isExit != 'Q' || isExit != 'q')


1. 사용자가 'Q'를 입력했을 때:
isExit != 'Q'는 거짓 
isExit != 'q'는 참 


2. 사용자가 'q'를 입력했을 때:
isExit != 'q'는 거짓
isExit != 'Q'는 참

AND 연산자 사용했을 때 

-> 둘 중 하나가 거짓이면 AND 연산자는 전체가 거짓이 되기 때문에 반복문이 종료된다. 

while(isExit != 'Q' && isExit != 'q')


1. 사용자가 'Q'를 입력했을 때:
isExit != 'Q'는 거짓
isExit != 'q'는 참


2. 사용자가 'q'를 입력했을 때:
isExit != 'Q'는 참
isExit != 'q'는 거짓 

 

따라서 while(isExit != 'Q' && isExit != 'q')는 Q나 q를 입력했을 때 반복문이 종료되는 올바른 코드다.

프로그래밍을 할 때는 이러한 논리 연산자의 차이를 명확하게 이해하는 것이 중요하다.

 

<AND 연산자를 사용한 전체 예제 코드문 >

#include <stdio.h>

int main(void) {
    char isExit = NULL;
    int num = 0; 

    // 반복문 시작
    while (isExit != 'q' && isExit != 'Q') {
        printf("문자 입력 ('Q', 'q' 입력 시 종료): ");
        isExit = getchar(); // 사용자로부터 문자 입력 받기
        num++;

        // 입력된 문자를 출력
        printf("입력한 문자: %c\n", isExit);

        // 종료 조건 체크
        if (isExit == 'q' || isExit == 'Q') {
            printf("종료 문자가 입력되었습니다.\n");
            break; // 반복문 종료
        }
    }

    // 입력된 총 문자 수 출력
    printf("총 입력된 문자의 수는 %d개입니다.\n", num - 1); // 종료 문자 제외
    return 0;
}