Я нахожусь в своем втором классе ООП, и мой первый класс преподавался в C#, таким образом, я плохо знаком с C++, и в настоящее время я практикую контроль ввода с помощью cin. Таким образом, вот мой вопрос:
Этот цикл, я создал довольно хороший способ проверить вход? Или есть ли более общий/принятый способ сделать его?
Спасибо!
Код:
int taxableIncome;
int error;
// input validation loop
do
{
error = 0;
cout << "Please enter in your taxable income: ";
cin >> taxableIncome;
if (cin.fail())
{
cout << "Please enter a valid integer" << endl;
error = 1;
cin.clear();
cin.ignore(80, '\n');
}
}while(error == 1);
Я не огромный поклонник поворота на исключениях для ioStreams. Ошибки ввода / вывода недостаточно исключительно, в этих ошибках часто очень вероятно. Я предпочитаю только использовать исключения для менее частых условий ошибок.
Код не плохой, но пропуская 80 символов немного произвольно, и переменная ошибки не нужна, если вы скрипили с петли (и должны быть Bool
, если вы держите его). Вы можете поставить прочее из CIN
непосредственно в , если
, что, возможно, больше Perl IDIOM.
Вот мой взять:
int taxableIncome;
for (;;) {
cout << "Please enter in your taxable income: ";
if (cin >> taxableIncome) {
break;
} else {
cout << "Please enter a valid integer" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
кроме того, помимо пропуска только в 80 символов, это только незначительные квалификации, и являются более вопросом предпочтительного стиля.
Один незначительный шкур состоит в том, что ошибка помощника переменной полностью избыточна и не требуется:
do
{
cin.clear();
cout << "Please enter in your taxable income: ";
cin >> taxableIncome;
if (cin.fail())
{
cout << "Please enter a valid integer" << endl;
cin.ignore(80, '\n');
}
}while(cin.fail());
Можете ли вы не считать попробовать / поймать, просто чтобы вы привыкли к концепции обработки исключений?
Если нет, почему бы не использовать логию, вместо 0 и 1? Получите привычку использовать переменные правильного типа (и создания типов, где это необходимо)
Cin.fail () также обсуждается в http://www.cplusplus.com/forum/beginner/2957/
На самом деле, во многих местах ...
Вы можете изучить некоторые из них и пытаться следовать объяснениям того, почему все должно быть сделано определенным образом.
Но рано или поздно вы должны понимать исключения ...