验证input和getline()函数

时间:2015-10-02 16:17:23

标签: c++ validation io getline

所以我想验证用户只输入文字而不是数字。如果输入任何数字,我再次询问她的输入。我认为这样可以解决问题,但它似乎不起作用:

$USER

由于 UINavigationBar.appearance().barTintColor = UIColor.redColor() UINavigationBar.appearance().translucent = false 变量属于#include <iostream> using namespace std; int main() { string name = ""; cout << "Enter name: "; getline(cin, name); while (!cin) // or cin.fail() { cout << "Numbers are not allowed, input name again: "; cin.clear(); cin.ignore(1000, '\n'); // is this even necessary since getline() already consumes spaces and new lines? getline(cin, name); } } 类型,name对象在收到号码时是否应该失败?如何验证它并确保在输入数字时再次提示输入?另外,出于好奇,因为我已经问过,如果用户输入的内容如下:Scarlett9356,重新提示输入的好方法是什么?谢谢。

3 个答案:

答案 0 :(得分:1)

  

因为name变量是字符串类型,所以cin对象收到数字时不应该失败吗?

没有。由数字组成的输入也作为字符串有效。

您需要使用其他策略才能使输入无效。

我建议采取以下措施:

bool is_valid_input(std::string const& name)
{
   bool is_valid = true;
   // Figure out the logic for deciding when the input is not valid.

   // ...

   if (!is_valid )
   {
      cout << "Numbers are not allowed, input name again: ";
   }

   return is_valid;
}

int main()
{
    string name = "";

    do
    {
       cout << "Enter name: ";
       getline(cin, name);
    }
    while ( !is_valid_input(name) );
}

答案 1 :(得分:1)

您可以通过执行以下操作验证字符串中没有数字:

#include <iostream>

using namespace std;

bool validName(string name)
{
    if(name.length() == 0)
        return false; // `name` cannot be empty

    for(int i = 0; i < name.length(); i++)
        if(name[i] >= '0' && name[i] <= '9') 
            return false; // There is a number in `name`

    return true; // `name` is valid
}

int main()
{
    string name = "";

    cout << "Enter name: ";
    getline(cin, name);

    while (!validName(name))
    {
        cout << "Numbers are not allowed, input name again: ";
        cin.clear();
        cin.ignore(1000, '\n'); // is this even necessary since getline() already consumes spaces and new lines?
        getline(cin, name);
    }
}

答案 2 :(得分:0)

如果您希望将输入限制为只接收没有数字的字符串,那么您可以使用http://codepen.io/JoeHastings/pen/wKJzNbstd::any_of

std::string name = "";

std::cout << "Enter name: ";
std::getline(std::cin, name);

while (std::any_of(name.begin(), name.end(), [](char ch) { return std::isdigit(ch); }))
{
    std::cout << "Numbers are not allowed, input name again: ";
    std::getline(std::cin, name);
}