读取整数时检查字母

时间:2015-08-23 08:35:21

标签: c++ windows c++11 type-conversion

我正在创建一个应用程序,要求用户输入生产订单(7位数字长),如下所示:

int order = 0;
cout << "Insert the order number: ";
cin >> ordem;

如何阻止用户输入信件?喜欢“I2345G789”?

这样做,我的应用程序只是进入一个无限循环。我在考虑使用这样的函数:

bool isLetter(int a)
{
    string s = to_string(a);
    for (int i = 0; i < s.size()-1; i++)
    {
        if (isdigit(s[i]))
        {
            return false;
        }
        else
            return true;
    }       
}

然后:

if (isLetter(order))
{
    cout << "Insert only numbers \n";
}

但它不起作用。为什么?我该如何改进代码?

PS:我对编程非常陌生,所以,对于任何初学者的错误都很抱歉。

1 个答案:

答案 0 :(得分:3)

我猜你的代码周围有一个循环,以便在它包含非数字时再次询问订单号,例如:

while(...)
{
    int order = 0;
    cout << "Insert the order number: ";
    cin >> order;
}

如果输入无法解析为整数的内容,则输入流将进入失败模式,这可能是您最终进入无限循环的原因。为了以简单的方式克服您的问题,您可以改为读取字符串:

string order;
while (true)
{
    cout << "Insert the order number: ";
    cin >> order;

    if (isLetter(order))
        cout << "Insert only numbers" << endl;
    else
        break;
}

函数isLetter()现在采用字符串,如下所示:

bool isLetter(string s)
{
    // Return true if the given string contains at least one letter.
    for (size_t i = 0; i < s.size(); i++)
        if (!isdigit(s[i]))
            return true;

    // Return false if there are only digits in the given string.
    return false;
}

请注意,它应该是i < s.size()而不是i < s.size()-1。也许你应该将你的函数isLetter()重命名为hasLetter(),因为这样会更正确。