>source

다음은 내 코드입니다.

#include <iostream>
using namespace std;
int main() {
  int num;
  cout<<"Enter a number: ";
  cin>>num;
  cout<<"The number is: "<<num;
  return 0;
}

프롬프트에 정수 대신 문자 나 문자열을 입력하면 cin>>num , 의 가치 num 다음과 같이 반환됩니다. 0 매번. C ++에서 그렇게 구현 되었기 때문입니까, 아니면 사소한 개념이 누락 되었습니까? 어떤 대답이라도 큰 도움이 될 것입니다.

  • 답변 # 1

    이것은 C ++ 11에 도입 된 기능입니다. cppreference에서;

    전에:

    If extraction fails (e.g. if a letter was entered where a digit is expected), value is left unmodified and failbit is set. (until C++11)

    지금:

    If extraction fails, zero is written to value and failbit is set. If extraction results in the value too large or too small to fit in value, std::numeric_limits::max() or std::numeric_limits::min() is written and failbit flag is set. (since c++11)

    C ++ 11 이전에는 코드가 잠재적으로 정의되지 않은 동작을 호출합니다. 입력에 실패하면 num 초기화되지 않았습니다. 이 경우 0 출력은 다른 출력과 마찬가지로 유효했습니다 (정의되지 않은 동작이 정의되지 않았기 때문에).

  • 답변 # 2

    Istreams 객체에는 잘못된 입력을 감지하는 플래그가 있습니다. 잘못된 입력이 cin에 전달 될 때마다 잘못된 입력 플래그가 설정됩니다. 전화로 cin.fail() 그리고 그것이 참으로 평가되는지 확인하면 입력이 정확하지 않은지 적극적으로 모니터링 할 수 있습니다. 이 경우 cin은 전달한 변수에 값 0을 할당합니다.

관련 자료

  • 이전 mysql - 동일한 열을 사용하여 가장 가까운 (가장 오래된 날짜)를 사용하여 차이 계산
  • 다음 r - 시퀀스의 전환