所以我想验证用户只输入文字而不是数字。如果输入任何数字,我再次询问她的输入。我认为这样可以解决问题,但它似乎不起作用:
$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,重新提示输入的好方法是什么?谢谢。
答案 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/wKJzNb和std::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);
}