用户输入字符串的Validator

时间:2012-10-18 14:18:20

标签: c++ validation

嘿我想在用户要求用户输入名字时阻止用户输入整数。我已经实现了这个整数和一个char。任何人都可以帮我调整我的代码字符串。

int getNum()
{
    int num;
    std::cout << "\nWhat is your age? ";
    while (!(std::cin >> num))
    {
        // reset the status of the stream
        std::cin.clear();
        // ignore remaining characters in the stream
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << "Enter an *integer*: ";
    }
    std::cout << "You entered: " << num << std::endl;
    return num;
}

char getChar(string q)
{
    char input;
    do
    {
        cout << q.c_str() << endl;
        cin >> input;
    }
    while(!isalpha(input));
    return input;
}

2 个答案:

答案 0 :(得分:1)

如果您打算使用std:string,那么您可以使用它来查找输入的字符串是否包含任何数字:

if (std::string::npos != s.find_first_of("0123456789"))
{
  std::cout << "digit(s)found!" << std::endl;
}

答案 1 :(得分:1)

string q = "This is a test123";

for(string::iterator i = q.begin(); i != q.end(); i++)
{
    if((*i < 'A' || *i > 'z') && (*i != ' '))
    {
        return false;
    }
}
如果您允许空格和其他字符,

也是一个选项。

编辑:更新以检查单个字符:

char c;
bool finished = false;
printf("Please enter your sex, M/F?\n");
while(!finished)
{
    cin >> c;
    if(!(c == 'm' || c == 'M' || c== 'f' || c=='F'))
    {
        printf("Please try again...\n");
    }
    else
    {
        finished = true;
    }
}

请注意,只有当按下Enter时才输入c,char为char,之前不会发生换行。