나는 StackOverflow에 대한 많은 기존 답변을 거쳤지만 아직도 붙어 있습니다.C++에서 cin 버퍼를 지우는 방법
코드 : I 입력 예컨대 s
대신 정수를 짜서 입력하면
int c;
cin >> c;
if(cin.fail()) {
cout << "Wrong Input";
cin.clear();
cin.ignore(INT_MAX, '\n');
}
else
{
cout << c*2;
}
, 그것은 Wrong Input
출력한다. 그러나 정수를 입력 한 다음 문자열을 입력하면 문자열을 무시하고 이전 정수 결과를 계속 출력하므로 cin 버퍼를 지우지 않고 이전 값인 c
이 계속 실행됩니다. 아무도 작동하지 않는 것처럼 cin.ignore()
이외의 가장 좋은 방법을 제안 할 수 있습니까? 그리고 나를 위해, cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
의 max() 오류가 발생합니다. 그래서 이것은 작동하지 않습니다.
왜이 작업을 할 수있는 올바른 방법을 얻을 수있는 질문을하지? [이] (http://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction) 상황을 처리하는 올바른 방법입니다. – NathanOliver
질문을 명확하게 할 수 있습니까 (예 : [MCVE] 제공). 나는 당신의 코드에서 작동해서는 안되는 것을 발견 할 수 없다. 나는 그것을 컴파일 할 수 없다. (http://ideone.com/Syb32Q) –
@ NathanOliver 이렇게하면 'numeric_limits :: max()'에러가 발생한다. max() 함수는'#define max (a, b)) (((a)> (b)))? (a) : (b)) '파일에이 문장을 정의하더라도. @ πάνταῥεῖ 나는 비디오를 업로드하려고 노력한다. 나는 그것이 더 명백 할 것이라고 생각한다. –
Nix