2016-09-02 3 views
1

다음 코드에 문제가 있습니다. Xcode (OS X)에서 사용합니다. 사용하는 경우 std :: cin을 초기화하는 방법은 무엇입니까?

어떻게 입력 리셋 표준에 :: CIN [그 코드의 내 첫 번째 시도 제거]? 나는 다른 값을 입력하려고하지만 std :: cin이 잘못된 값으로 더 이상 작동하지 않는 것 같아서 그럴 수 없다.

UPD2 나는이 코드를 사용 내 두 번째 시도에서 : 루프에서 여기에 바로 입력 5 개 값을

for (unsigned char i = 0; i < 5; i++) { 

    int value = 0; 

    std::cout << "\n>> Enter \"value\": "; 
    std::cin >> value; 

    if (std::cin.fail()) { 
     std::cin.clear(); 
     std::cin.ignore(); 
     std::cout << "Error: It's not integer value!\n"; 
    } else { 
     std::cout << "The value format is ok!\n"; 
    } 

    std::cout << "value = " << value << std::endl; 

} 

합니다. 매번 오류가있을 때마다 확인합니다. 잘못된 값 ("asdf")을 설정하면 std :: cin이 이상하게 작동하여 더 이상 작동하지 않습니다.

>> Enter "value": 4 
The value format is ok! 
value = 4 

>> Enter "value": 234 
The value format is ok! 
value = 234 

>> Enter "value": asdfghjkl 
Error: It's not integer value! 
value = 0 

>> Enter "value": Error: It's not integer value! 
value = 0 

>> Enter "value": Error: It's not integer value! 
value = 0 
234 
234 
78 
345 
657 
345 
dsf 
f 

답변

4

당신이 사용할 수있는, 조건이, std::cin.fail()가 발생합니다 : 다음

std::cin.clear(); 
std::cin.ignore(); 

그리고 루프를 계속 진행 continue; 문 나는이 출력을 얻을. std::cin.clear()은 오류 플래그를 지우고 새로운 플래그를 설정하며 std::cin.ignore()은 효과적으로 무시합니다 (추출 및 삭제).

출처 :

  1. cin.ignore()
  2. cin.clear()
+0

대답이 @Galik –

+3

업데이트되는'clear' 스트림의 오류 상태 플래그를 지 웁니다. 캐릭터와는 아무런 관련이 없습니다. 인수를 사용하지 않고 '무시'하면 단 한 문자 만 버리게됩니다. 즉,''asdf ''라고 입력하면 4 회 반복되어 입력이 잘못되었다는 것을 알려주며 다시 입력 할 수 있습니다. 'std :: cin :: ignore (std :: numeric_limits :: max(), '\ n')'를 써서 줄 끝까지 버려야한다. –

+0

@BenjaminLindley - "std :: cin :: ignore"문제가 있습니다. 나는 CLang을 사용하며 std :: cin.ignore이어야하지만 단 하나의 매개 변수만으로 보이는 것입니다. – JavaRunner

관련 문제