2014-04-01 2 views
1

나는 간단한 재귀 적 계승 프로그램을 가지고있다. 이 연습의 핵심은 예외를 처리하는 것입니다. 우리는 부정적인 번호가없는의 한계와 그것을 잘 작동처럼보다 큰 12C++ try catch throw

{ 
    int factorial(int); 
    int number = 0; 
    string s; 
    while(number != -1) 
    { 
     cout << "Please enter a number 1 - 12 " <<endl; 
     cout << "or -1 to quit the program: "; 
     try{ 
     cin >> number; 
     if (number < 0 || number > 12) 
      throw number; 
     else 
      cout << number << " factorial is: " << factorial(number)<<"\n" << endl; 
     }catch(int number) 
     { 
     cout<< "Your number violates the rules; " <<number<<" is either negative or greater than 12.\n"<<endl; 
    } 
    } 

} 

int factorial(int number) { 
    int temp; 
    if(number <=1) 
     return 1; 
    temp = number * factorial(number - 1); 
    return temp; 
} 

내 오류 처리가 보인다없는 번호로 부과 있었고, 그것은 나에게 새로운 개념입니다. 그러나 오류 처리에 대한 더 나은 작업을 원합니다. 예를 들어 숫자가 아닌 것을 입력 할 때 "p"라고 말하면 프로그램은 무한 루프를 시작합니다. 내가 어떻게 코드를 작성하여 실제로 사용자가 입력하는 번호인지 확인할 수 있습니까?

감사합니다.

+2

입력 유효성을 검사하는 방법에 대한 질문은 여러 번 답변되었습니다! 스트림이 양호한 상태인지 여부 만 확인하면됩니다. 그렇지 않으면 스트림을 재설정하고 문자를 무시합니다. 이 답변에 대한 질문을 검색하십시오. 또한 예외가 아닌 경우에는 예외를 사용하지 말고 * 항상 * std :: exception에서 파생 된 것을 throw하십시오. 일단 std :: exception에서 파생되지 않은 예외가 발생한 위치를 찾으려고하면 몇 백만 줄의 코드를 가진 프로그램에서'what()'이 반환하는 것을 보는 것이 매우 유용하다는 것을 알 수 있습니다! –

+0

시도, 던지기, 잡기, 예외 처리 같은 핵심 단어 이외의 다른 검색 방법도 확실하지 않았습니다. 유효성 검사를 생각하지 않았습니다. 감사. – HanH1113

답변

1

입력을 테스트 할 다른 조건을 추가하십시오. 예를 들어 이렇게 할 수 있습니다.

... 
try{ 
     cin >> number; 
     if (!cin) { 
     //error msg here 
     break; 
    } else if (number < 0 || number > 12) 
...