프로그래밍

C언어 배우고있는데.. 모르는게있습니다

#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); 

 

스캔이거 붙이고나서 부터 그런거같은데

 

왜일까요?;;;

7개의 댓글

거기다가 break point 잡아놓고 a에 뭐 들어가는지 디버깅 ㄱ

0
2019.04.24

scanf_s에서 입력을 하면 1을 입력하면 1과 엔터를 입력하고 1은 scanf_s의 입력으로 들어가고

엔터는 login의 gets_s의 입력으로 들어가서 넘어가버려서 그런듯

scanf_s 다음에 fflush(stdin)으로 입력 버퍼 비워주던지

while(getchar() != '\n'); 라인 넣어주면 해결 될 듯

 

visual studio 최신버전은 fflush 안되는걸로 알고있으므로 while문 넣으면 될꺼임

0
2019.04.24
@흔한개드립의

감사합니다!!!

0
2019.04.24
@흔한개드립의

fflush는 "출력" 버퍼를 지우는 함수이기 때문에 입력버퍼를 비울 때 쓰면 안된다

0
2019.04.24
@달세뇨

넵 감사합니다!

0
2019.04.24
@달세뇨

리눅스환경에서만 짜다보니ㅋㅋㅋ

해결법이 틀렸구마잉

뭐 원인은 알려줬으니 해결했겠지

0
2019.04.24

이미 해결했겠지만 문제는 위에서 써준게 맞고, 다른 해결방법으로는

%c로 입력받아서 [ - '0' ] 해주면 int형 정수로 떨어지는 방법이 있고

%c로 입력받아서 case문을 '1', '2', 처럼 문자로 지정해주는 방법도 있어

이렇게 하면 혹시 예기치못한 문자 입력으로 일어나는 버그 상황도 처리할 수 있지

나는 이쪽이 좀 더 깔끔한 것 같아서 이렇게 알려주는 편

fflush()는 비표준함수라 지양

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180473 [컴퓨터] 컴퓨터 완본체 샀는데 깔아야할 드라이버나 설정 있나요? 4 하이웨이 0 1 시간 전 66
180472 [잡담] 좆데온 8천번대보다 7900xtx가 전기모기채는신이야 0 2 시간 전 72
180471 [컴퓨터] 형님들 견적짠거 호환 문제없는지 확인 부탁드립니다 2 우루루옳지 0 2 시간 전 32
180470 [정보] 크러쉬80 - 레이니75를 만든 Wob의 텐키리스 키보드 1 Veigrake 0 3 시간 전 96
180469 [잡담] 여기 로봇 청소기도 물어봐도 됨?? 6 년째재수강 0 3 시간 전 115
180468 [잡담] 윈도우12 전부 레거시쳐낸다는말이 하드웨어를 말한거구나 4 이거보인다면기분탓임 0 3 시간 전 182
180467 [컴퓨터] 갤럭시80 넘나 이쁜것이예요 2 군마 1 6 시간 전 279
180466 [모바일] 차량용 맥세이프 충전기 탁상용으로 쓰니 좋다 4 년째군대 0 6 시간 전 156
180465 [잡담] 채터링 어캐잡습니까... 5 로우팡맨 0 7 시간 전 158
180464 [잡담] 4월에 마우스 큰 게 두 개 나오네 4 GNStout 0 7 시간 전 201
180463 [컴퓨터] 무선 키보드 마우스 세트는 별로인가? 3 하이웨이 0 8 시간 전 106
180462 [컴퓨터] 10만원대 포터블 모니터는 사는거 아니더라 12 코싸멘뚜 0 8 시간 전 180
180461 [정보] 레이니75 저격하는 브릿지75 18 Veigrake 0 10 시간 전 263
180460 [모바일] 새 애플펜슬 나오면 기존 제품들 가격내려가? 5 II바II코II드II 0 13 시간 전 214
180459 [잡담] 드디어 왔다 레이니 5 ltearl 0 21 시간 전 287
180458 [프로그래밍] 그 혹시 게임쪽 종사자 있음? 16 god79ii 0 21 시간 전 409
180457 [컴퓨터] sata 케이블때문에 ssd가 망가질 수도 있나요? 9 드웨인토마스 0 22 시간 전 308
180456 [모바일] 횽들 어거좀 봐줘 6 부자가될개붕이놈들 0 1 일 전 189
180455 [컴퓨터] 선생님들 혜안을 구합니다 9 빠른인정빌런 0 1 일 전 176
180454 [모바일] 당근으로 갤럭시탭 s9 울트라 사기로했는데 2 말이야방구야 1 1 일 전 291