代码片段在某些情况下有效,但没有按预期进行,为什么?

时间:2012-11-25 05:59:25

标签: 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 << "Enter Student ID: ";
}

输入A将使其遍历while循环,但如果我输入12.5,它将退出while循环并继续运行。是不是测试它是否会解析为整数?为什么它接受12.5但不接受字符?

1 个答案:

答案 0 :(得分:1)

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

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