#include <stdio.h>
#include <string.h>
void Register(char* id, char* passwd)
{
printf("아이디 입력 : ");
gets_s(id, 100);
printf("비밀번호 입력 : ", id);
gets_s(passwd, 100);
printf("가입 완료!\n");
}
int loginCheck(char* id, char* checkid, char* passwd, char* checkpasswd)
{
if (!strcmp(id, checkid) && !strcmp(passwd, checkpasswd))
{
return 1;
}
else
{
return 0;
}
}
void login(char* checkid, char* checkpasswd)
{
printf("아이디 입력 ");
gets_s(checkid, 100);
printf("비밀번호 입력 ");
gets_s(checkpasswd, 100);
}
void main()
{
int a;
char id[100];
char passwd[100];
char checkid[100];
char checkpasswd[100];
printf("1.회원가입 2.로그인");
scanf_s("%d", &a);
switch (a)
{
case 1:
printf("회원가입 입니다\n");
Register(id, passwd);
break;
case 2:
login(checkid, checkpasswd);
break;
if (loginCheck(id, checkid, passwd, checkpasswd))
{
printf("로그인 성공!");
}
else
{
printf("로그인 실패!");
}
}
}
아직 미완성인 소스인데
void Register 함수에서 출력이
아이디 입력 : 비밀번호 입력 : 이런식으로 출력되고 한번만 값이 기입됩니다..
원래는
아이디 입력 : 값 입력후 > 비밀번호 입력 : 값 입력후 다음 으로 넘어감
이런식으로 잘됬었는데..
제생각에는
scanf_s("%d", &a);
스캔이거 붙이고나서 부터 그런거같은데
왜일까요?;;;
카톡에올렸다가받으면사진안돌아감
거기다가 break point 잡아놓고 a에 뭐 들어가는지 디버깅 ㄱ
흔한개드립의
scanf_s에서 입력을 하면 1을 입력하면 1과 엔터를 입력하고 1은 scanf_s의 입력으로 들어가고
엔터는 login의 gets_s의 입력으로 들어가서 넘어가버려서 그런듯
scanf_s 다음에 fflush(stdin)으로 입력 버퍼 비워주던지
while(getchar() != '\n'); 라인 넣어주면 해결 될 듯
visual studio 최신버전은 fflush 안되는걸로 알고있으므로 while문 넣으면 될꺼임
파히비
감사합니다!!!
달세뇨
fflush는 "출력" 버퍼를 지우는 함수이기 때문에 입력버퍼를 비울 때 쓰면 안된다
파히비
넵 감사합니다!
흔한개드립의
리눅스환경에서만 짜다보니ㅋㅋㅋ
해결법이 틀렸구마잉
뭐 원인은 알려줬으니 해결했겠지
요거트샤베트
이미 해결했겠지만 문제는 위에서 써준게 맞고, 다른 해결방법으로는
%c로 입력받아서 [ - '0' ] 해주면 int형 정수로 떨어지는 방법이 있고
%c로 입력받아서 case문을 '1', '2', 처럼 문자로 지정해주는 방법도 있어
이렇게 하면 혹시 예기치못한 문자 입력으로 일어나는 버그 상황도 처리할 수 있지
나는 이쪽이 좀 더 깔끔한 것 같아서 이렇게 알려주는 편
fflush()는 비표준함수라 지양