2014-04-19 6 views
0

터미널에서 하나의 번호를 수집하는 C++ 프로그램의 함수가 있습니다.거대한 사용자 입력을 제한으로 줄이기? (C++)

사용자가 입력 한 숫자를 수락하고, 부호있는 long long int 범위를 벗어나는 숫자를 정확한 한도로 줄이거 나, 사용자에게 정확하게 알려주고, 성공적으로 반환하기를 원합니다.

모든 숫자가 아닌 입력은 완전히 버리고 사용자에게 무한정 다시 프롬프트해야합니다.

지나치게 큰 입력이 자동으로 부호있는 제한으로 축소 될 것이라고 생각했지만 대신이 함수는 유효하지 않은 것으로 처리하고 비 번호 다시 프롬프트를 제공합니다. 이 문제를 어떻게 해결할 수 있습니까?

void get_input(long long int& input_value) 
{ 
    while(0==0) //infinite loop 
    { 
     cout << "Input whole number: "; 
     if(cin >> input_value) 
     { 
      cout << endl; 
      if (input_value >= LLONG_MAX) 
      { 
       cout << "Size limit exceeded. " << LLONG_MAX << " will be used instead.\n\n"; 
      } 
      else if (input_value <= LLONG_MIN) 
      { 
       cout << "Size limit exceeded. " << LLONG_MIN << " will be used instead.\n\n"; 
      } 
      cin.clear(); 
      return; 
     } 
     else 
     { 
      cout << "Please input a numeral.\n\n"; //trash invalid input 
      string garbage; 
      cin.clear(); 
      getline(cin,garbage); 
     } 
    } 
} 

iostream, string 및 climits가 포함되어 있으며 전역 적으로 네임 스페이스 std를 사용하고 있습니다.

+1

[C/C++에서 정수 오버플로를 감지하는 가장 좋은 방법] 중복 됨 (http://stackoverflow.com/questions/199333/best-way-to-detect-integer-overflow-in-cc) – MrDuk

+0

@MrDuk I 이 다른 게시물에서 내 문제를 해결하는 방법을 이해하지 마십시오. – Makst

+0

2 차 답을보세요. – MrDuk

답변

-1

문자열을 입력하고 strtoll을 사용하고 싶습니다.

+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. – Riser

+0

@Achilles 질문은 "어떻게 해결할 수 있습니까?" 대답은이 문제를 해결할 수있는 방법을 설명합니다. 불충분 한 세부 사항으로 생각한다면, 그렇지 않으면 불명확 한 경우, 자유롭게 downvote 또는 깃발을하십시오. –

+0

입력 방법을 으로 변경'cin >> unconverted_input; const char * converted_input = unconverted_input.c_str(); input_value = strtoll (converted_input, NULL, 10);'unconverted_input은 C++ 문자열이며 완벽하게 작동합니다. – Makst