0

我需要检查用户输入的输入类型,如果它不是所需的类型,我应该打印一条错误消息。我的代码是:

int ClassInput::inputInt(QString str)
{
    signed int l;
    std::cout << str.toStdString();
    std::cin>>l;

    while(!l)
    {
        eh.handleError(1);
        std::cin>>l;
        cin.clear ();
        cin.ignore (1000, '\n');
    }
    return l;
}

但问题是在输入浮点值时它没有打印错误消息。此外,它将进入下一步并执行计算,就像输入正确的输入一样。

有时它会无限打印错误语句。请问谁能更正我的代码?

4

2 回答 2

1

我认为typeinfo是您正在寻找的。这可能是用户预期输入为 int 的示例代码。

std::cin>>l;
QString input = typeid(l).name();
if(input.compare("int")) continue;
于 2013-12-19T15:43:09.197 回答
1

我认为您的问题不是类型检查,而是值检查。所以typeid实际上并不是一个好的选择。

特别是关于您的问题的解决方案。您应该对输入添加更严格的值检查。将用户的输入存储在 int 变量中并不是一个好主意。因为如果用户键入一个float变量,它将被隐式转换为int。这就是为什么您的代码在输入浮点值时不打印错误消息的原因。但不会影响你后续的计算。

另一件事,如果输入不是数字,而是字符,0 将分配给您的输入变量。

为了稳健地检查输入值,您应该将输入变量的类型更改为std:string并检查字符串是否是合法输入。执行此操作的可能例程:

  1. 检查是否有非数字。

  2. 根据您的程序需要检查它是否是合法数字。

因此,不要仅仅编写粗略!l检查,而是编写另一个单独的检查函数并在此处调用它。

于 2013-12-19T16:16:02.993 回答