| yheekeun |
2바이트를 담는 unsigend short 로 4바이트인 정수값을 담는 것이 일단 오류가 되겠네요
그리고 도중에 scanf("%d", password);라고 되있는데 &password로 고치셔야됩니다.
또 scanf("%c", &hidden_key) 라고 되있으신데 char hidden_key[20] 으로 하신걸 보니 문자열을 받으실 생각이셨던거 같은데 만약 문자열을 받으시려면 scanf("%s", hidden_key) 로 하는 것이 맞습니다.
scanf에 대해 개념이 정확히 안잡히신거 같아 말씀드리는데
scanf 라는 것은 주소값을 넘겨 받아 그 주소에 값을 넣어주는 함수라고 생각하시면 됩니다.
일반변수 password 는 주소를 의미하는 것이 아니므로 주소지정연산자 & 를 붙여주셔야되고
hidden_key[20] 에서 배열명 hidden_key 는 주소값을 의미하므로 &없이 hidden_key 그대로 써주셔야됩니다.
혹은 scanf("%s", &hidden_key[0]); 이라고 써주셔야됩니다.
왜냐면 hidden_key[0], hidden_key[1], hidden_key[2], 등등은 배열명이 아니므로 주소를 가르키는것이 아니고 변수이기 때문입니다~
더 자세한건 나중에 배열 한번더 보시면서 파악해보세요~
그리고 이대로 해도 오류가 나는게 scanf 에서 서식문자 %c %d 에 의미에 있는데
%c는 문자, %d는 정수를 받습니다. %d는 1(enter) 입력하게되면 정수형인 1만 저장되고 enter(문자형)는 저장이 안된상태로 입력버퍼에 남아 있게 되는데 다음 scanf("%c", hidden_key) 이부분에서 enter라는 문자형을 입력받게 되요. 그럼 자신에 의도랑은 상관없이 hidden_key 에는 엔터가 입력되고 비밀번호를 입력하라는 문구가 뜰거에요~
fflush(); 라는 함수로 입력버퍼를 비워주셔야 됩니다.
위에 개념들은 상당히 중요한 개념들인데 천천히 시간들여가며 이해하시길 바랄께요 |
2014/02/16 |
|