C ++用户输入限制

时间:2015-10-19 06:37:34

标签: c++

我目前正在研究一个程序并思考是否可以对用户输入实施其他限制。我到目前为止所做的限制是用户只允许输入字母和空格,在没有任何输入的情况下点击输入也不会被接受。

cout<<"Input customer's lastname\t\t: ";
getline(cin,lname);
if(lname.find_first_not_of("abcdefghijklmnopqrstuvwxyz ")!=string::npos)
{
    cout<<"You can only input alpha here!\n";
    cin.clear();
    goto p1;
}
else if(lname.empty())
{
    cout<<"Please enter your lastname!\n";
    cin.clear();
    goto p1;
}

我想要的另一个限制是如果用户输入是所有空格,程序也会显示一条消息。其次,我想知道如果用户输入正确的信息(de la Cruz)是否可以检测到输入,那么单词应该只用一个空格分隔,如果不是另一个消息则显示。我不知道怎么做,我已经做了一些研究,但我用C ++找不到任何类似的东西。我不知道这是否可能,因为我刚刚开始学习C ++,或者我根本没有足够的逻辑。 :(

2 个答案:

答案 0 :(得分:0)

创建一个函数来检查输入是否有效。在while循环中使用该函数。

bools isInputValid(std::string const& input)
{
   // add all the checks
}

将其用作:

std::cout << "Enter input\n";
while ( getline(std::cout, line) )
{
   if ( isInputValid(line) )
   {
      break;
   }
   std::cout << "Input is not vaild. Try again\n";
}

答案 1 :(得分:0)

我在检查空间时给了我一点帮助。

bool has_only_spaces(const std::string& str) 
{
   return str.find_first_not_of (' ') == str.npos;
}

bool has_two_consecutive_spaces(const std::string& str)
{
    for (unsigned int i = 1; i < str.length(); i++)
    {
        if ((str[i - 1] == str[i]) && (str[i] == ' '))
        {
            return true;
        }
    }
    return false;
}

int main()
{
  std::string lname;
  std::cout << "Input customer's last name: ";
  getline(std::cin, lname);
  if (has_only_spaces(lname) || has_two_consecutive_spaces(lname))
  {
      std::cout << "Not a valid input" << std::endl;
      std::cin.clear();
  }  
}