작성
·
430
0
대충 라인 40번쯤에 printf("(shift + 8을 누르면 나오는 특수문자)")를
printf("%d", c)로 바꿔봤는데
d를 입력하면 1000
e 를 입력하면 1010
f를 입력하면 1020
a를 입력하면 970
1를 입력하면 490
2를 입력하면 500
이렇게 나와요 어떻게 해야지 고쳐지나요?
// 비밀번호를 입력 받아서
// 맞는 경우? 비밀 읽를 읽어와서 보여주고,계속 작성하도록
// 틀린 경우? 경고 메세지를 표시하고 종료합니다.'
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();
이렇게 똑같은 문장 두 번 사용해서 실행 해보시겠어요?