2013-08-02 2 views
0

달성하고자하는 것은 간단합니다. 입력이 정수가 아니면 "숫자가 유효하지 않습니다"라고 표시해야합니다.비 정수 입력을 가져 오지 못합니다.

숫자는 이미 정수 (int number)로 설정되어 있습니다.

#include <iostream> 

using namespace std; 

int main(){ 
    int number; 
    try{ 
     cin >> number; 
    }catch(const ios::failure &){ 
     cout << "Number is invalid"; 
    } 
} 

결과가 입력 -> 1 => 1이고 입력 -> a is => a 일 때 아무 것도 잡히지 않습니다.

이 try-catch 블록에는 무엇이 누락 되었습니까?

답변

7

예외를 설정해야합니다. cin로 전화하기 전에 cin.exceptions(istream::failbit);을 추가하십시오. iostreams는 기본적으로 예외를 사용하지 않습니다 (원래는 예외가 C++의 일부가 아닌 시간에 설계되었습니다).

1

스트림은 기본적으로 예외를 발생시키지 않습니다. 예외를 throw하려는 경우 exceptions() 멤버 함수를 호출하여 예외를 사용하도록 설정해야합니다.

std::cin.exceptions(std::istream::failbit); 
0

정말이 그들을 필요로하지 않는 스트림의 예외를 활성화하고 그들이 이해하지 마십시오. 대부분의 입력 오류는 예외를 던지는 것이 아니라 프롬프트를 표시하고 반복하여 처리해야합니다. 반복되는 실패 후에는 반드시 예외를 throw하십시오. 그러나 그것은 하천의 책임이 아닙니다. 당신이 입력 실패시 예외를 throw해야하는 경우

그러나, 그것은 할 쉽게 :

try { 
    std::cin >> number; 
    if (!std::cin) 
     throw whatever; 
} 
관련 문제