본문 바로가기

C

도어락 비밀번호

도어락 비밀번호를 입력받고  확인하는 프로그램입니다.

마지막 5자리 입력이 특정 패턴과 일치하는지 확인하고,  그 결과에 따라 문을 여는지 경고를 출력합니다.

 

즉,

한 줄에 하나씩 버튼을 입력 받고    4 번째 입력부터는 마지막 입력된 4 개의 버튼을 출력한다

‘*’ 이 입력되면 문이 열리는지 열리지 않는지 출력하시오  문이 열리면 “door open!”, 열리지 않으면 “wrong 를 출력

이를 C 언어로 구현하는 예제 입니다.

 

#include <stdio.h>
#include <string.h>

#define _CRT_SECURE_NO_WARNINGS

#define PASSCODE "9876*"

int main() {
    char input[1000];  // 임의의 긴 입력을 저장할 배열
    char lastFive[6] = "";  // 마지막 5개의 입력을 저장할 배열
    int inputIndex = 0;  // 입력된 전체 문자의 인덱스
    char button;  // 입력된 버튼

    while (1) {
        printf("button>>");
        button = getchar();
        while (button == '\n') {  // 줄바꿈 문자 무시
            button = getchar();
        }
        input[inputIndex++] = button;

        // 마지막 5개의 입력을 업데이트
        if (inputIndex >= 5) {
            lastFive[0] = input[inputIndex - 5];
            lastFive[1] = input[inputIndex - 4];
            lastFive[2] = input[inputIndex - 3];
            lastFive[3] = input[inputIndex - 2];
            lastFive[4] = input[inputIndex - 1];
            lastFive[5] = '\0';  // 문자열 종료
        }

        // 4번째 입력부터 마지막 4개의 입력을 출력
        if (inputIndex >= 4) {
            printf("%c%c%c%c\n", input[inputIndex - 4], input[inputIndex - 3], input[inputIndex - 2], input[inputIndex - 1]);
        }

        // '*'이 입력되면 비밀번호 확인
        if (button == '*') {
            if (strcmp(lastFive, PASSCODE) == 0) {
                printf("door open!\n");
                break;  // 프로그램 종료
            }
            else {
                printf("wrong\n");
                break;  // 프로그램 종료
            }
        }
    }

    return 0;
}

 

이 프로그램은 사용자가 입력하는 버튼을 한 줄씩 입력받고, 마지막 5개의 입력이 9876*과 일치하는지 확인합니다.

 

설명:

  1. input 배열은 모든 입력을 저장합니다.
  2. lastFive 배열은 마지막 5개의 입력을 저장합니다.
  3. inputIndex는 입력된 전체 문자의 인덱스입니다.
  4. button 변수는 현재 입력된 버튼을 저장합니다.

각 입력이 들어올 때마다 input 배열에 저장하고,

입력된 문자의 개수가 5 이상일 경우 lastFive 배열을 업데이트합니다.

입력된 문자의 개수가 4 이상일 경우 마지막 4개의 문자를 출력합니다.

 

마지막으로,

'*'가 입력되면 lastFive 배열과 PASSCODE를 비교하여 문을 열지,

경고 메시지를 출력할지 결정합니다.

 

배열을 사용하지 않는다면 ....

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS


int main() {
    char input1 = '\0', input2 = '\0', input3 = '\0', input4 = '\0', input5 = '\0';
    char button;

    while (1) {
        printf("button>>");
        button = getchar();
        while (button == '\n') {  // 줄바꿈 문자 무시
            button = getchar();
        }

        // 최신 입력을 업데이트
        input1 = input2;
        input2 = input3;
        input3 = input4;
        input4 = input5;
        input5 = button;

        // 4번째 입력부터 마지막 4개의 입력을 출력
        if (input2 != '\0') {
            printf("%c%c%c%c\n", input2, input3, input4, input5);
        }

        // '*'이 입력되면 비밀번호 확인
        if (button == '*') {
            if (input1 == '9' && input2 == '8' && input3 == '7' && input4 == '6' && input5 == '*') {
                printf("door open!\n");
                break;  // 프로그램 종료
            }
            else {
                printf("wrong\n");
                break;  // 프로그램 종료
            }
        }
    }

    return 0;
}

'C' 카테고리의 다른 글

약수들의 합과 평균  (0) 2024.06.05
안이 비어 있는 삼각형 그리기  (0) 2024.06.05