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

김익명님의 프로필 이미지
김익명

작성한 질문수

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

프로젝트(후반전)

저도 똑같이 2번 입력되는데

작성

·

430

0

대충 라인 40번쯤에 printf("(shift + 8을 누르면 나오는 특수문자)")를

printf("%d", c)로 바꿔봤는데

d를 입력하면 1000

e 를 입력하면 1010

f를 입력하면 1020

a를 입력하면 970

1를 입력하면 490

2를 입력하면 500

이렇게 나와요 어떻게 해야지 고쳐지나요?

define _CRT_SECURE_NO_WARNINGS

include

// 비밀번호를 입력 받아서

// 맞는 경우? 비밀 읽를 읽어와서 보여주고,계속 작성하도록

// 틀린 경우? 경고 메세지를 표시하고 종료합니다.'

define MAX 10000

int main(void)

{

//fgets, fputs 활용

char line[MAX]; // 파일에서 불러온 내용을 저장할 변수

char contents[MAX]; // 일기장에 입력할 내용

char password[20]; // 비밀번호 입력

char c; // 비밀번호 입력 할 때 키값 확인용 (마스킹)

printf("비밀일기에 오신 것을 환영합니다\n");

printf("비밀번호를 입력하세요 : ");

// getchar() / getch() 의 차이?

// getchar() : 엔터 입력시 동작

// getch() : 키 입력시 바로바로 동작

int i = 0;

while (1)

{

c = getch();

if (c == 13) // enter -> 비밀번호 입력종료

{

password[i] = "\0";

break;

}

else // 비밀번호 입력 중

{ //?

printf("%d", c);

password[i] = c;

}

i++;

}

// 비밀번호 : 나도코딩 skehzheld

printf("\n\n === 비밀번호 확인중... == \n\n");

if (strcmp(password, "skehzheld") == 0) // 비밀번호 일치

{

printf(" === 비밀번호 확인 완료 ==\n\n ");

char * fileName = "c:\\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 를 입력하세요");

while (1)

{

scanf("%[^\n]", contents); // 새 줄[\n]이 나오기 전까지 읽어들임 (한 문장)

getchar(); // Enter 입력 (\n) flsh 처리

if (strcmp(contents, "EXIT") == 0)

{

printf("비밀일기 입력을 종료합니다\n\n");

break;

}

fputs(contents, file);

fputs("\n", file); //enter 를 위에서 무시 처리 하였으므로 임의로 추가

}

fclose(file);

}

else // 비밀번호가 틀린경우

{

printf(" === 비밀번호가 틀렸어요 ====\n\n");

printf(" 으아아앙 도둑이양♥\n\n");

}

return 0;

}

답변 5

0

문제가 해결 됬습니다. 감사합니다.

0

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

ㅠㅠ 어떡하죠??
제게 알림이 오지 않아서 5개월 전의 댓글을 이제야 봤네요.. 죄송합니다.
앞으로는 댓글 밑에 댓글로 달지 마시고 매번 새로운 질문으로 등록 부탁드려요..
그리고 getch 를 두번 써도 문제가 발생한다면, 위치를 아래 코드처럼 바꾸어보실수 있을까요?
제 의도는, 2번씩 입력되는 문자열 중 1번째만 가지고 처리를 하고 나서, 2번째 입력되는 값은 그냥 갖다 버리는 것입니다.
혹은, 2번째 c = getch(); 대신
fflush(stdin); 을 입력하셔서 확인 부탁드려요!
while (1)
{
c = getch();
if (c == 13) // enter -> 비밀번호 입력종료
{
password[i] = "";
break;
}
else // 비밀번호 입력 중
{ //?
printf("%d", c);
password[i] = c;
}
c = getch(); // 여기로 위치 이동
// 위처럼 해도 안되면
// fflush(stdin); 사용 해보기
i++;
}

0

저도 똑같은 상황입니다.

0

김익명님의 프로필 이미지
김익명
질문자

했습니다.

정상적으로 한개가 쳐지기는 하는데 엔터를 누르면 다음으로 넘어가지 않고 만 하나가 더 추가돼요.

예를들어 skehzheld 이라는 암호를 입력하면

*****로 바뀌잖아요?

그런데 여기서 엔터를치면

** 이렇게 돼요

0

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

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

김익명님의 프로필 이미지
김익명

작성한 질문수

질문하기