代码片段在某些情况下有效,但不符合预期,为什么

Code Snippet Works in Certain Cases but not as Expected, Why?

本文关键字:不符合 为什么 有效 片段 情况下 代码      更新时间:2023-10-16

我有这个代码片段,应该测试用户是否输入整数。如果用户输入字母,但不是小数,这就可以工作,我想知道为什么会这样。这是我的代码片段:

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

输入 A 将使其遍历 while 循环,但如果我输入 12.5它会退出 while 循环并继续前进。它不是在测试它是否会解析为整数吗?为什么它接受12.5而不是角色?

只要

cin>>id找到可以转换为int的东西(在本例中为"12"),它就会成功。当它到达无法转换的内容时,它会停止,但如果它已经读取了int,那就算成功了。

要检查它读取的所有内容是否都是数字,您可能需要执行一些操作,例如使用 std::getline 将一行输入读取到字符串中,然后使用 std::isdigit 来测试这些是否都是数字。测试对int的转换(本身)只会告诉您它找到了可以读取为整数的内容,但不会告诉您后面是否跟着其他无法转换为int的内容。