2015-10-19 2 views
1

В настоящее время я работаю над программой и думаю, если можно реализовать другие ограничения для ввода пользователя. Ограничения, которые я сделал на данный момент, это то, что пользователь разрешает вводить только альфа и пробелы, а вход без ввода не принимается.Ограничения на ввод пользователей 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++, или, может быть, у меня совсем не хватает логики. :(

+3

небольшой наконечник: не использовать goto .. всегда есть другое решение. –

+0

Спасибо! Но могу ли я спросить, почему? – vnylng

+1

http://stackoverflow.com/q/46586/4523099 –

ответ

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(); 
    } 
} 
+0

Спасибо, я смог сделать это, посчитав длину ввода и сравнив его с пробелами, обнаруженными (isspace), используя цикл, если совпадение тогда недействительно. Теперь я работаю над одним пространственным правилом между двумя словами. – vnylng

+0

Функция 'has_two_consecutive_spaces' проверяет, существует ли более 1 пробела между словами. Если да, то он возвращает true, иначе он возвращает false. –

+0

Идея обнаружения двух последовательных пространств и логики выражения if помогла мне. Спасибо чувак! – vnylng

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"; 
} 
+0

Спасибо за ответ, но я спрашиваю, как построить или сделать последние два ограничения, которые я хотел добавить. Я не знаю, как заставить эти вещи работать с C++, поэтому я спрашиваю, есть ли у вас какая-то логическая идея для этого. – vnylng

Смежные вопросы