C++ 代码片段在某些情况下可以工作,但不符合预期,为什么?

C++ 代码片段在某些情况下可以工作,但不符合预期,为什么?,c++,parsing,object,loops,cin,C++,Parsing,Object,Loops,Cin,我有一段代码片段,用来测试用户是否输入整数。如果用户输入的是字母,而不是小数,那么这就行了,我想知道这是为什么。以下是我的代码片段: Student student; int id; while(!(cin >> id)) { cout << "\nERROR: Please enter a Positive Whole Number" << endl; cin.clear(); cin.ignore (); cout <

我有一段代码片段,用来测试用户是否输入整数。如果用户输入的是字母,而不是小数,那么这就行了,我想知道这是为什么。以下是我的代码片段:

Student student;
int id;

while(!(cin >> id))
{
    cout << "\nERROR: Please enter a Positive Whole Number" << endl;
    cin.clear();
    cin.ignore ();
    cout << "Enter Student ID: ";
}
学生;
int-id;
而(!(cin>>id))
{

cout
cin>>id
只要找到可以转换为
int
(“12”,在这种情况下)的内容,就会成功。当它到达无法转换的内容时,它会停止,但如果它已经读取了
int
,则视为成功


要检查它读取的所有内容是否都是数字,您可能需要执行一些操作,例如使用
std::getline
将一行输入读入字符串,然后使用
std::isdigit
测试这些是否都是数字。测试到
int
的转换(本身)只会告诉您它找到了可以读取为整数的内容,但不会告诉您后面是否有其他无法转换为
int的内容
但我也一直在使用12.5获得真实的实例,因此我开始搜索新的解决方案。不过我会再试一次,谢谢!您也可以尝试
boost::lexical_cast
,它不接受123abc等。