Хороший цикл контроля ввода с помощью cin - C++

Я нахожусь в своем втором классе ООП, и мой первый класс преподавался в 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);
17
задан Alex 16 January 2010 в 01:51
поделиться

3 ответа

Я не огромный поклонник поворота на исключениях для 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 символов, это только незначительные квалификации, и являются более вопросом предпочтительного стиля.

30
ответ дан 30 November 2019 в 11:32
поделиться

Один незначительный шкур состоит в том, что ошибка помощника переменной полностью избыточна и не требуется:

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());
2
ответ дан 30 November 2019 в 11:32
поделиться

Можете ли вы не считать попробовать / поймать, просто чтобы вы привыкли к концепции обработки исключений?

Если нет, почему бы не использовать логию, вместо 0 и 1? Получите привычку использовать переменные правильного типа (и создания типов, где это необходимо)

Cin.fail () также обсуждается в http://www.cplusplus.com/forum/beginner/2957/

На самом деле, во многих местах ...

http://www.google.com.sg/#hl=en&source=hp&q=c%2b%2B+TURIALIALL & MBTNH=&aq=f&oq== C% 2B% 2B + Учебное пособие

Вы можете изучить некоторые из них и пытаться следовать объяснениям того, почему все должно быть сделано определенным образом.

Но рано или поздно вы должны понимать исключения ...

2
ответ дан 30 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: