저도 똑같이 2번 입력되는데
568
작성한 질문수 1
대충 라인 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
ㅠㅠ 어떡하죠??
제게 알림이 오지 않아서 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
했습니다.
정상적으로 한개가 쳐지기는 하는데 엔터를 누르면 다음으로 넘어가지 않고 만 하나가 더 추가돼요.
예를들어 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





