2017-11-14 3 views
1

실제로 지정하지 않은 작업, 내 함수의 입력 범위가 어떤 값을 가져야하는지 (오직 항상 양의 정수가 될 것임), 입력은 런타임으로 결정됩니다. 선택한 유형이 실제로 그것이 먹이를 먹었던 가치를 지닐 수 있는지 어떻게 든 테스트 할 수 있습니까? 내가 찾고 테스트되는 마법의 일부 (또는 선행하는 선)와stdin의 숫자가 주어진 유형의 숫자 ​​제한보다 작은 지 확인하는 방법은 무엇입니까?

char test; 
std::cin >> test; 
if(MAGIC) 
{ 
    std::cout << "Error." << std::endl; 
} 

:

내가 바라고 무엇인지를 보여줍니다. 그것은 다음과 같이 작동합니다 :

표준 입력 : 100 -> 출력 금지

표준 입력 : 1000000 -> 오류.

+1

관련 : https://stackoverflow.com/questions/3582509/why-does-integer-overflow-cause-errors-with-c-iostreams – scohe001

답변

3

대부분의 데이터 형식의 경우 here과 같이 입력 스트림의 오류 상태를 확인할 수 있습니다. 그러나 std::cin >> test은 데이터를 단일 문자 (예 : '1')로 읽으므로 다른 유형 (예 : char)에서 작동하지 않습니다. 이는 달성해야하는 것이 아닙니다.

Demo.

을 참고

std::string max = std::to_string(std::numeric_limits<char>::max()); 
std::string s; 
std::cin >> s; 
bool cmp = (s.size() == max.size()) ? (s <= max) : (s.size() < max.size()); 
std::cout << s << " " << cmp << std::endl; 
을 : 상기 코드 가정한다
데이터가 입력 된 것으로

하나의 접근법은 std::string에 번호를 판독하고, 제한을 통해 얻은 max()과 비교하는 임의로 큰 숫자 일 수 있지만 숫자 이외의 문자는 포함 할 수 없습니다. 이 가정을 할 수없는 경우 a solution from this Q&A을 사용하여 입력이 숫자인지 테스트하십시오.

관련 문제