Ето малък фрагмент от моя код:
int read_prompt() {
string prompt,fname,lname,input;
int id;
cout << "customers> ";
cin >> prompt;
if (prompt.compare("add") == 0) {
cin >> id;
cin >> fname;
cin >> lname;
NewCustomer(id,fname,lname);
} else if (prompt.compare("print")==0) {
print_array();
} else if (prompt.compare("remove")==0) {
cin >> id;
RemoveCustomer(id);
} else if (prompt.compare("quit")==0) {
return 0;
} else {
cout << "Error!" << endl;
}
read_prompt();
return 0;
}
Това работи добре, стига потребителят да не въвежда нищо неочаквано. Един от тестовите случаи, тази програма трябва да предаде входове "добавете 125mph Daffy Duck", чийто id в крайна сметка е 125, fname е равно на mph, а lname е равно на Daffy. След като тази функция получи и трите променливи, тя се извиква отново и подканва отново потребителя, коя Duck след това се въвежда коя "Грешка!" получава резултат очевидно.
Как да хвана тази грешка, докато потребителят я въвежда? Дали cin е най-добрата функция за използване в това отношение? Потърсих getline(), но малко не съм сигурен как да го внедря.
switch
. Ще избегнете много грешки и код за валидиране. - person ChiefTwoPencils   schedule 16.02.2013cin
не е функция; това е обект. Като такъв той има членски функции и има безплатни функции, които могат да го използват. Много от тях са екстрактори, тоест претоварвания наoperator>>
. - person Pete Becker   schedule 16.02.2013