Я пытаюсь написать проверку для строки, которая соответствует следующим рекомендациям:
Может быть алфавит
Может быть '.' или ','
Может иметь пробел
НЕ МОЖЕТ быть пустым
Так, например, «Боб», «Боб Смит» и «Боб Смит-младший» должно быть хорошо, в то время как "" или просто нажатие клавиши ввода не должно.
Если строка соответствует этим рекомендациям, функция должна просто вернуть ее, но если она не будет выполнена, она должна продолжаться до тех пор, пока не будет введена правильная запись.
Я пробовал несколько разных способов циклического прохождения для проверки, и, если я правильно понимаю разрыв, я считаю эта структура должна работать. Тем не менее, ввод простой строки, такой как "Bob", не проходит тесты. Я также не уверен, как убедиться, что пользователь не может просто нажать пробел или нажать клавишу ввода.
std::string patronName()
{
std::string name;
bool loopFlag = true;
do
{
std::cout << "Please enter the name of the Patron: ";
std::getline(std::cin, name);
for (int i = 0; i < name.length(); i++)
{
if (!isalpha(name[i]) || !ispunct(name[i]) || !isspace(name[i]) || name.empty())
{
std::cout << "Invalid name entry." << std::endl;
break; //If we're invalid, doesn't matter what the rest is
}
loopFlag = false;
}
}
while(loopFlag);
return name;
}
Есть ли очевидные ошибки, которые я упускаю в моей логике?