C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[38072] Re:Re:Re:왜 이렇게 하면 되는걸까요!!??? scanf!! 답변 꼭 부탁드립니다__)
구철회 [chouoo] 1092 읽음    2004-11-17 08:51
char temp;

scanf("%c", &temp);

으로 작성했을 때 값을 입력하기 위해 'a' + 'Return key' 이런 식으로 치게 되잖아요?

그러면 입력 버퍼에는 'a'  와 'Return Key'  2개의 문자가 들어가게 됩니다.

그런데 scanf는 값만을 받아들이기 때문에 scanf를 호출한 다음에는 입력 버퍼에 아직 'Return Key' 문자가 남아 있죠.

만약 다음에 다시 scanf를 호출할려고 하면 이미 입력 버퍼에 'Return Key'가 남아 있기 때문에 다시 'b' + 'Return Key'를 입력하더라도 scanf는 처음의 'Return Key'를 입력받은 모양 처음의 'Return Key'를 입력 값으로 받아들입니다. 또는 이미 입력 버퍼에 데이터가 있기 때문에 자동으로 넘어갈 수도 있습니다.

입력버퍼의 입장에서 정리하면,

scanf가 값을 읽기 전
입력버퍼 : 'a', 'CR'
scanf가 값을 읽은 후
입력버퍼 : 'CR'
다음 scanf가 값을 읽기 전
입력버퍼 : 'CR', 'b', 'CR'
다음 scanf가 값을 읽은 후
입력버퍼 : 'b', 'CR'

이런 식으로 될 겁니다.

그래서 scanf를 사용한 다음 입력 버퍼를 클리어하는 fflush(stdin) 을 사용하는 것이고요.

제 생각으로는 scanf 내 format의 혼돈을 피하기 위해 fflush(stdin)를 사용하는 것이 좋다고 생각합니다.

그리고 if((temp == 'n') || (temp == 'N')) 이라는 표현은 "아주 좋은" 표현입니다. 논리 연산의 구분을 확실하게 하기 위해 가능한 괄호(, ) 를 많이 쓰는 것이 좋습니다.

뭣하면 제가 샘플 소스를 만들어서 올릴 수는 있지만 그건 의미가 없다고 생각합니다. 스스로 고민하고 노력하는 동안에 성장한다고 봅니다. 해결될 때까지 계속 질문을 하시기 바랍니다.

그럼 도움이 되었기를.



파란하기스 님이 쓰신 글 :
: 재가 한거 되던데..;;
:
: 재가 작성한 프로그램 같은경우는
:
: 본론안에 있는 프로그램을
:
: 끄거나, 다시 실행시키지 않아도 또 할 수 있게끔 하는 프로그램인데요..
:
: 재가 했던 방법을 해도 됩니다.
:
: 그리고
:
: char temp;
:
: while(1){
:
: -------본문--------
:
: scanf("%c",&temp);
: }
:
: 그냥 이대로 프로그램을 실행했을 시, 문자를 받을 시간을 주지 않고
: 프로그램은 그냥 돌아가버립니다.
:
: 그래서 그 위에다가 fflush 를 쓰게 되는데요..
: fflush를 쓰지 않고 재가 물어봤던
: scanf("\n%c",&temp);
: 를 하게 되면 문자열을 입력받을 수 있게끔 해줍니다.
: 만약 \n이 printf 에 들어가게 되면 한줄 띄어주게끔 해주는 역할정도는 저도 아는데요,
: 저희 학교 선배가 scanf("\n%c",&temp); 이렇게 해도 fflush 안쓰고도 할 수 있다고 했어요.
: 그래서 해보니 정말 돼었구요..
:
: 그래서 물어보는겁니다.
: 왜! \n이 scanf속에 들어가게 되면 문자열을 받을 수 있게끔 도와주는지요.
: 전 \n이 문자를 받는다는 그런 소린 하지 않았습니다.__);
: 그 정확한 이유를 알고 싶기에 여쭤봅니다~~

+ -

관련 글 리스트
38062 왜 이렇게 하면 되는걸까요!!??? scanf!! 답변 꼭 부탁드립니다__) 파란하기스 1285 2004/11/16
38064     Re:왜 이렇게 하면 되는걸까요!!??? scanf!! 답변 꼭 부탁드립니다__) 이성제 927 2004/11/17
38073         Re:Re:왜 이렇게 하면 되는걸까요!!??? scanf!! 답변 꼭 부탁드립니다__) Batman 938 2004/11/17
38066         Re:Re:왜 이렇게 하면 되는걸까요!!??? scanf!! 답변 꼭 부탁드립니다__) 파란하기스 1004 2004/11/17
38075             Re:Re:Re:왜 이렇게 하면 되는걸까요!!??? scanf!! 답변 꼭 부탁드립니다__) 이성제 927 2004/11/17
38077                 해결 방법 입니다. 이성제 954 2004/11/17
38072             Re:Re:Re:왜 이렇게 하면 되는걸까요!!??? scanf!! 답변 꼭 부탁드립니다__) 구철회 1092 2004/11/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.