{
int n;
cin>>n;
cout<< n;
}
any alphabet or special character
을 입력하면 출력은 0
입니다.int 데이터 형식의 cin 기능에 혼란이 있음
C에서 나는 scanf();
및 printf()
을 사용하지 않았습니다. 해당 ASCII 값을 인쇄합니다.
왜 이런 일이되고 있습니까?
{
int n;
cin>>n;
cout<< n;
}
any alphabet or special character
을 입력하면 출력은 0
입니다.int 데이터 형식의 cin 기능에 혼란이 있음
C에서 나는 scanf();
및 printf()
을 사용하지 않았습니다. 해당 ASCII 값을 인쇄합니다.
왜 이런 일이되고 있습니까?
C 및 C++에서 정수를 입력 할 때 드라이버 입력 기능은 숫자가 아닌 문자가 읽힐 때까지 숫자 문자를 읽습니다.
예를 들어, 시퀀스는 "123GHI"
123
값을 반환한다.
대신에 정확한 용어를'return'입니까? –
저는 입력 프로세스가 함수이고 일반적으로 함수가 값을 반환하기 때문에 그렇게 믿습니다. –
"* ** 출력 ** 값 123 *"이 더 정확합니다. 출력 값은 항상 함수 반환 값에있는 것은 아니며, 파싱 된 값이 반환 값이 아닌 참조 매개 변수를 통해 출력되기 때문에 결과가'operator >> '의 경우와 같습니다. –
설명하십시오 왜 이런 일이 무엇입니까?
std::istream& operator>>(std::istream&, int)
의 documentation에서
이 언급 한 것 (강조 광산) : (숫자가 예상되는 곳에 문자가 입력 된 경우 예)
추출에 실패하면
, 값이 수정되지 않은 남아 failbit이 설정됩니다.
는 C++ (11) 코드의 경우는 초기화가 보장되는 것 같다
추출에 실패 할 경우, 제로 값으로 기록되고 failbit가 설정됩니다. 추출 결과가 값이 너무 크거나 작아 값에 맞지 않으면
std::numeric_limits<T>::max()
또는std::numeric_limits<T>::min()
이 기록되고 failbit 플래그가 설정됩니다. 당신은 당신의 코드의 디버그 빌드를 실행 추측 된
는 n
아마 자동으로 0
로 초기화되지만, 그것은 당신이 설명하는 경우 initalized되지 이후 기술적 접근은, 정의되지 않은 동작입니다.
당신은 실패 수를 추출 중에 발생한 경우 입력이 감지 후 cin
의 상태를 확인하기 위해, 또는 당신이 안전하게 지금 초기화 값을 사용할 수있는 경우 :
int n;
std::cin >> n;
if(std::cin) {
std::cout << n << std::endl;
}
else {
std::cin.clear(); // Clear the streams fail state
std::string dummy;
std::cin >> dummy; // Consume the non numeric input
std::cout << "Wrong input, '" << dummy << "' is not a number."
}
@Quentin THX, 저 처방으로 거기서 괴롭 혔습니다. –
C++ 11 이상에서는 동작이 약간 다릅니다. "* 추출에 실패하면 ** 값에 **가 쓰여지고 failbit은 설정됩니다. *" –
@remy 채택했습니다. –
당신은에 대한 문서를 확인 했 '>>'의 int 과부하? 그리고 주목해라, C! = C++. – Carcigenicate
값을 입력 한 후'cin'의 상태를 확인할 수 있습니다. πάνταῥεῖ COUT @ –
<< cin.fail(); 1을 준다; num이 0 일 때만 0을 반환합니다. 왜 실패 했는가? – MELWIN