2014-01-21 3 views

답변

2

에 대한 임의의 값을 반환 않습니다 std::get()은 입력을 (형식이 지정되지 않음) 정수 값으로 읽습니다. 따라서 형식을 지정하지 않아도됩니다. 특정 유형 . 그러나 operator>>은 입력을 형식의 데이터로 읽으므로 주어진 유형으로 읽는 형식을 형식화해야합니다. 귀하의 경우, 입력 'q'double에 적합하지 않으므로, 포맷이 실패합니다.

4

마찬가지로, std::istream::get은 입력 스트림에서 문자이됩니다. 예를 들어, 숫자 1을 입력으로 입력하면 '1' 인 ASCII 코드 (십진수는 49)를 반환합니다 (ASCII를 사용하는 시스템에서는 거의 모든 것입니다).

입력 연산자 >>을 사용하면 은 올바른 형식으로 입력 된을 구문 분석합니다. 따라서 변수와 함께 >>을 사용하고 1을 입력하면 변수에 값 1.0이 표시됩니다.

당신이 가진 문제는 입력 연산자 >>가 제대로 대신 숫자의 문자를 입력 할 때처럼 입력을 구문 분석 할 수없는 경우, 다음 입력 연산자가 실패하고 하지 당신을 의미하는 변수를 설정한다는 것입니다 초기화되지 않은 변수 을 정의되지 않은 동작 인으로 인쇄하십시오. 이 동작은 C++ 11에서 변경되었습니다 (예 : this old answer of mine 참조).

스트림 개체를 조건으로 사용할 수 있으며 입력 연산자 함수가 문제의 스트림을 반환한다는 것을 기억해야합니다. 예를 들어

if (std::cin >> x) 
    std::cout << x << '\n'; 
else 
    std::cout << "Error in input\n"; 
+0

+1 마이너 질의어로 '1.0'은 정확하게 'double'(또는 그 문제에 대해서는 'float')으로 표현할 수 있습니다. – Angew

관련 문제