inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

프로젝트(후반전)

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

568

김익명

작성한 질문수 1

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;

}

c

답변 5

0

WU XIUXIANG

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

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

WU XIUXIANG

저도 똑같은 상황입니다.

0

김익명

했습니다.

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

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

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

그런데 여기서 엔터를치면

** 이렇게 돼요

0

나도코딩

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

안녕하세요 7장 포인터에 관해 질문드립니다.

0

63

1

8-8 연장전 / 소스코드 공유해드려요. 참고하세요!

0

64

0

섹션6. 프로젝트 소스코드 올려드려요.

0

94

1

영상속에서 배운 코드들을 Git Repository에 올려두될까요?

0

79

1

경찰서 조서 프로젝트 문의

0

104

1

경찰관 조서 프로젝트

0

142

1

scanf

0

92

1

제대로 작성한것 같은데 빌드가 않됩니다.,

0

170

1

구문 오류 C2059

0

400

1

컴파일 시 fatal error C1010 발생

0

284

1

반환값이 없는 함수

0

215

1

반올림 되는건가요?

0

253

1

맥으로수강

0

193

1

10-2

0

257

1

질문이 있습니다

0

342

1

3-3 for 반복문 ++i 일때 질문입니다.

0

244

1

6-4(배열 파트 '문자 vs 문자열') sizeof 예제 다르게 출력되는 분들 참고하세요.

1

411

0

함수 선언과 정의를 동시에 해도 되나요?

0

1076

1

빌드오류가 있다고 나오고, 지정된 파일을 찾을 수 없다고 오류가 나옵니다..

0

403

1

안녕하세요 좋은 강의와 책 감사드립니다!! 다름이 아니라 명령어를 실행시켰을 때 저런식으로 나와서 질문드립니다

0

934

0

질문있습니다!

0

378

1

질문드립니다

0

387

1

scanf_s(" %d", &answer); 이후 바로 종료

0

312

0

질문 드립니다.

0

431

1