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
대답이 @Galik –
업데이트되는'clear' 스트림의 오류 상태 플래그를 지 웁니다. 캐릭터와는 아무런 관련이 없습니다. 인수를 사용하지 않고 '무시'하면 단 한 문자 만 버리게됩니다. 즉,''asdf ''라고 입력하면 4 회 반복되어 입력이 잘못되었다는 것을 알려주며 다시 입력 할 수 있습니다. 'std :: cin :: ignore (std :: numeric_limits :: max(), '\ n')'를 써서 줄 끝까지 버려야한다. –
@BenjaminLindley - "std :: cin :: ignore"문제가 있습니다. 나는 CLang을 사용하며 std :: cin.ignore이어야하지만 단 하나의 매개 변수만으로 보이는 것입니다. – JavaRunner