2014-05-17 3 views
1

C 다른 입력 요구하기 전에 CIN 버퍼, 나는 다음과 같은 코드가 있습니다지우기 ++

int choice = 0; 
char st1[N]; 

cout << "enter choice" <<endl; 
cin >> choice; 

cout << "enter sentence" << endl; 
cin.get(st1, N-1); 

라인을 cin.get 점점 상관없이 입력이 무엇인지, 그것이 ST1의 [에 \ 0 문자를 읽을 수 없게됩니다 0] 그게 전부입니다.

최신 cin (선택 변수로)과 관련이 있다고 가정합니다.

사용자로부터 새로운 입력을 받기 전에 cin 버퍼를 "정리"하는 방법은 무엇입니까? 가능하다면.

감사

+1

getline (cin, aString);을 사용하는 것이 좋습니다. 이렇게하면 스트림에 입력을 남기지 않고 유형을 안전하게 유지할 수 있습니다. – user3152069

답변

3

ignore을 사용하여 줄 바꿈을 버퍼에서 삭제할 수 있습니다 (예 : 줄 바꿈 문자 앞에 X 문자를 구분 기호로 사용). 구분 기호가 추출되면 추출 및 무시가 중지됩니다.

예컨대

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

은 또한 관련 : Why would we call cin.clear() and cin.ignore() after reading input?

+0

입력이 s.th 일 경우 어떻게됩니까? 이렇게 :'3 \ n'? –

+1

http://ideone.com/p9aavK –

+1

견본을 위해 THX, 나는 당신의 대답을 이미 upvoted. 나는 단지 이것을 다른 _ "answer"_와는 대조적으로 넣고 싶었습니다. –

-1

getchar()cin >> choice; 후 작업을 수행합니다. 그러면 입력 버퍼에서 \n이 소모됩니다. choice 이후

\n 버퍼에 남아 있고 문자열 입력을 촬영할 때,이 \n가 발생하고이 입력을 복용 중단 입력 int이다.

+0

이것은 'cin'입력 버퍼를 실제로 _clear_하지 않습니다. 최후의 수단으로 모든 스트림 오류 상태를 재설정하는 것을 포함하여 cin.clear()가 수행합니다. –

+0

이것은 입력 버퍼를 지우지는 않지만 OP의 경우에 완료됩니다. –

+0

하나의'getchar()'호출이 그 일을 올바르게 할 것이라는 보장은 없습니다. 이것은 사용자가'cin >> choice;에 실제로 입력하는 것,'! –

0

당신은 항상 cin.sync()를 사용하여 시도 할 수 있습니다.