인프런 영문 브랜드 로고
인프런 영문 브랜드 로고
채널톡 아이콘

인프런 커뮤니티 질문&답변

전호성님의 프로필 이미지

작성한 질문수 1

C 프로그래밍 - 입문부터 게임 개발까지

프로젝트(후반전)

밑의 질문에 대한 소스코드를 다시 첨부합니다!

작성

·

133

0

소스코드가 제대로 입력되지 않은 것 같아서 다시 올립니다!!

'''#define _CRT_SECURE_NO_WARNINGS

include

//비밀번호를 입력받아서 맞는경우: 비밀일기를 읽어와서 보여줌

//틀린경우: 경고메세지 표시 후 종료

define MAX 10000

int main(void)

{

char line[MAX];

char contents[MAX];

char password[20];

char c; // 비밀번호 입력시 키값 확인

printf("비밀일기에 오신것을 환영합니다!\n");printf("비밀번호를 입력하세요!\n");//getchar(): 엔터를 입력받아야 동작 getch(): 키입력시 바로 동작int i = 0;while (1){    c = getch();    if (c == 13) // enter     {        password[i] = '\0';        break;    }    else // 비밀번호 입력중    {        printf("!");        password[i] = c;    }    i++;}printf("\n\n======비밀번호 확인 중....==========\n\n");if (strcmp(password, "12345") == 0){    printf("==비밀번호 확인완료!==\n");    char * fileName = "c:\\file_practice\\secretdiary.txt";    FILE * file = fopen(fileName, "a+b");     // 파일이 없으면 생성하고 파일이 있으면 append를 한다    if (file == NULL)    {        printf("파일열기 실패\n");        return 1;    }    while (fgets(line, MAX, file) != NULL)    {        printf("%s", line);    }    printf("\n\n 내용을 계속 작성하세요! 종료하시려면 exit를 입력하세요!\n\n");    while (1)    {        scanf("%[^\n]", contents); // 새 줄(\n)이 나오기 전까지 모든 문장을 읽어들인다        getchar(); // enter입력 (\n): flush 처리        if (strcmp(contents, "EXIT") == 0)        {            printf("비밀일기 입력을 종료합니다\n\n");            break;        }        fputs(contents, file);        fputs("\n", file); // enter를 위에서 무시처리 하였으므로 임의로 추가    }    fclose(file);}else{    printf(" ==== 비밀번호가 틀렸어요!====\n");    printf("꺅!! 당신 누구야! 남의 일기장을!!\n\n\n");}

return 0;

}'''

답변 2

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

시스템상에서 글자를 2번씩 인지하는 경우라면 우선 대안으로는 글자를 2번씩 받도록 해서 그 중 하나는 버리도록 처리할 수 있겠네요, 코드상 입력 받는 부분을 아래와 같이 두번 사용하시면 처음 getch을 통해 받은 부분은 사용하지 않고 두번째 getch을 통해 받은 값만 사용할수 있을것 같습니다.
c = getch();
c = getch();
이렇게 똑같은 문장 두 번 사용해서 실행 해보시겠어요?

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요 나도코딩입니다.

아래 코드를 실행시키면 결과가 어떻게 나오나요?

#include<stdio.h>int main(void){char c;while (1){c = getch();printf(입력값 : %c\n, c);}return 0;

}

정상적이라면 1234 입력시 아래와 같이 나와야 합니다. 그렇지 않고 다른 글자들이 함께 입력된다면 후속 작업이 필요할 수도 있겠네요 (해당하는 키를 찾아서 skip 처리를 한다던지 등이요)

입력값 : 1

입력값 : 2

입력값 : 3

입력값 : 4

..

실행해보시고 다시 글 남겨주세요 !