다음 프로그램은 Google 자습서에서 나온 것으로 10 진수를 입력 할 때를 제외하고는 매우 간단합니다. 이 숫자가 아닌 경우왜 (! (cin >> int)) 첫 번째 반복에서 10 진수를 받아들이지 만 다른 것들은 받아 들일 수없는 이유는 무엇입니까?
Enter a number (-1 = quit): 5
You entered 5
Enter a number (-1 = quit):
:
Enter a number (-1 = quit): p
You entered a non-numeric. Exiting...
All done.
그리고 그것이 정확하게 설명하는 방법은, 입력이 INT (되지 -1)가 출력하는 경우
#include <iostream>
using namespace std;
int main() {
int input_var = 0;
do {
cout << "Enter a number (-1 = quit): ";
if (!(cin >> input_var)) {
cout << "You entered a non-numeric. Exiting..." << endl;
break;
}
if (input_var != -1) {
cout << "You entered " << input_var << endl;
}
} while (input_var != -1);
cout << "All done." << endl;
return 0;
}
작동하려면 10 진수 인 경우 :
Enter a number (-1 = quit): 5.9
You entered 5
Enter a number (-1 = quit): You entered a non-numeric. Exiting...
All done.
double
또는 float
을 int
에 할당하고이 경우에는 잘린 소수를 출력하고 cin
은 false
이 아니지만 입력을 받아들이지 않는 두 번째 반복에서는 C++가 어떻게 동작하는지 압니다.
처음부터 받아 들일 수 없거나 단지 소수점 이하를 자른 것이고 입력이 int
인 것처럼 동일한 동작을했는지는 알 수 있습니다.하지만 왜 처음 루프와 다르게 동작합니까? 두 번째 루프?
iostream 입력의 좋은 기본값은 ''헤더의'getline'을 사용하는 것입니다. –
'십진수'란 무엇입니까? 10 진수 라니? 그것이 그것이 실제로 의미하는 유일한 것이기 때문입니다. – EJP
@EJP 또한 "소수점으로 표현 된 정수가 아닌 값"을 의미합니다. 그것은 내 질문에 태그 "십진수"의 정의의 일부입니다. 애매한 점 죄송합니다. – ZeroAG