왜 때 'Q'(또는 문자) 문자의 char 값 입력입력 값이 다른 이유는 무엇입니까?
double x;
x = cin.get();
cout << x << endl;
수익을 입력하지만,
double x;
cin >> x;
cout << x << endl;
은 'Q'
왜 때 'Q'(또는 문자) 문자의 char 값 입력입력 값이 다른 이유는 무엇입니까?
double x;
x = cin.get();
cout << x << endl;
수익을 입력하지만,
double x;
cin >> x;
cout << x << endl;
은 'Q'
에 대한 임의의 값을 반환 않습니다 std::get()
은 입력을 (형식이 지정되지 않음) 정수 값으로 읽습니다. 따라서 형식을 지정하지 않아도됩니다. 특정 유형 . 그러나 operator>>
은 입력을 형식의 데이터로 읽으므로 주어진 유형으로 읽는 형식을 형식화해야합니다. 귀하의 경우, 입력 'q'
은 double
에 적합하지 않으므로, 포맷이 실패합니다.
마찬가지로, 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";
+1 마이너 질의어로 '1.0'은 정확하게 'double'(또는 그 문제에 대해서는 'float')으로 표현할 수 있습니다. – Angew