2016-10-13 2 views
0

저는 C++을 처음 사용하며 기본 프로그램을 만들려고했습니다. 아래와 같이 두 값을 요청하고 별도의 변수에 결과를 저장하는 대신 정화 int 형이 아닌 값을 입력하고, 다음의 입력을 요청하는 경우에는C++ inputStream을 지울 수 없습니다

#include <iostream> 

using namespace std; 

int main() { 

int sizeOfArray = -1, bufferSize = -1; 

while (true){ 
cout << "Enter the size of the array: " << endl; 
cin >> sizeOfArray; 
if (cin.fail()) 
cin.clear(); 


cout << "Enter the size of the buffer (k): " << endl; 
cin >> bufferSize; 
if (cin.fail()) 
cin.clear(); 


if (sizeOfArray > 0 && bufferSize > 0){ 
break; 
} 

} 

return 0; 
} 

, I 무한 반면에 실행할 아래와 같이 루프 : 버퍼의 크기 (K) 입력 : 배열의 크기를 입력 버퍼 (K)의 크기를 입력 :

배열의 크기를 입력 입력 배열의 크기 : 버퍼의 크기를 입력하십시오 (k) :배열의 크기를 입력하십시오 : 버퍼의 크기를 입력하십시오 (k) : 배열의 크기를 입력하십시오 : 버퍼의 크기를 입력하십시오 (k) : 크기를 입력하십시오 : 크기를 입력하십시오 버퍼 (K)의 : 버퍼 (K)의 크기를 입력 :: 배열의 크기 입력 : 배열의 크기를 입력 ^ C

: 버퍼의 크기 (K)를 입력
+2

또한 입력 버퍼를 지우려면 잘못된 입력을 사용해야합니다. –

답변

1

cin.clear()cin의 상태를 지 웁니다. 스트림에서 문제가되는 입력을 제거하지는 않습니다. 나머지 줄을 무시하는 코드를 추가해야합니다.

if (cin.fail()) 
{ 
    cin.clear(); 
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
} 

#include <limits> 

std::numeric_limits을 사용할 수 있도록 추가합니다.

std::istream::ignore에 대해 자세히 알아보십시오.

+0

@R Sahu이 줄을 내게 설명해 주시겠습니까? cin.ignore (std :: numeric_limits :: max(), '\ n'); – Sandup

+0

@Sandup, 답변에 링크가 추가되었습니다. –

+0

@R Sahu 아, 지금이 점을 이해합니다. – Sandup

관련 문제