【问题标题】:Code Snippet Works in Certain Cases but not as Expected, Why?代码片段在某些情况下有效,但不如预期,为什么?
【发布时间】:2012-11-25 05:59:25
【问题描述】:

我有这段代码 sn-p 应该测试用户是否输入整数。如果用户输入字母而不是小数,则此方法有效,我想知道为什么会这样。这是我的代码 sn-p:

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 而不是字符?

【问题讨论】:

    标签: c++ parsing object loops cin


    【解决方案1】:

    cin&gt;&gt;id 只要找到 something 就会成功,它可以转换为 int(在本例中为“12”)。当它到达无法转换的东西时,它会停止,但如果它已经读取了int,则视为成功。

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

    【讨论】:

    • 见我试过isdigit(),但我也不断得到12.5的真实实例,所以我开始寻找新的解决方案。会再试一次谢谢!
    • 你也可以试试boost::lexical_cast,不接受123abc之类的。
    猜你喜欢
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2022-12-18
    • 2020-02-22
    • 1970-01-01
    • 2014-01-17
    相关资源
    最近更新 更多