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

C/C++ Q/A
[1229] Re:입력큐를 비우려면 어떻게 해야되요?
남병철.레조 [lezo] 1721 읽음    2002-09-22 17:58

안녕하십니까? 레조입니다.

C함수 중에도 있는것같지만 지금 떠오르지 않으니 일단 istream_withassign Class의 멤버를
하나 적어봅니다.
ignore( MAX, DELIM );
: 구분자(DELIM)가 나타날때까지 MAX만큼 제거

키보드나 디스크에서 읽은 입력에서 여분의 문자가 남게되면 입력 스트림에 남으며 이것은
다음 입력 연산에 원래의 목적이 아닌데도 전달된다.
이런 불필요한 줄을 없애려면 istream의 ignore( MAX, DELIM ) 구성원 함수를 사용하며
이것은 지정된 구분 문자까지(DELIM) 포함하여 최대 MAX 문자를 읽어서 제거한다.

예)
cin.ignore( 10, '\n' );



예제 코드)
#include <iostream.h>

void main()
{
    int I;

    // 숫자만 입력 ( 엔터만 입력하면 내려감 )
    while(1) {
        cout << "\nEnter an integer: ";
        cin >> I;
        if( cin.good() ) {
//            cin.ignore( 10, '\n' );
            break;
        }

        cin.clear();
        cout << "Incorrect input";
        cin.ignore( 10, '\n' );
    }
    cout << "integer is " << I << endl;


    // 입력이 없는 입력 처리
    while( 1 ) {
        cout << "\nEnter an integer : ";
        cin.unsetf( ios::skipws ); // 공백을 무시하지 않음
        cin >> I;
        if( cin.good() ) {
//            cin.ignore( 10, '\n' );
            break;
        }
        cin.clear();
        cout << "Bad";
        cin.ignore( 10, '\n' );
    }
    cout << "Good";
}



if문 안에보면 cin.ignore()부분을 주석 처리했습니다.
입력할때 222 222 222처럼 한번에 여러개 입력하면 다음 cin에서 입력 스트림에 남은
내용을 그대로 출력하므로 문제가됩니다.
(물론 주석을 제거하면 문제없습니다.)
C 함수를 찾는다면 C++을 내것으로 (레퍼런스편)을 추천합니다.
레퍼런스중에서 그나마 예제도 있고 설명도 한국적(??)이네요. ^^;



박석순 님이 쓰신 글 :
: 입력큐에 남아있는 모든 문자를 지우려면 무슨 메서드를 써야됩니까?

+ -

관련 글 리스트
1221 입력큐를 비우려면 어떻게 해야되요? 박석순 1575 2002/09/20
1229     Re:입력큐를 비우려면 어떻게 해야되요? 남병철.레조 1721 2002/09/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.