2016-02-25 3 views
0

Я работаю над программой, которая предлагает пользователю выбрать один из трех различных вариантов, введя целое число от 1 до 3 (4). Мне нужно написать код, который проверяет, что ввод является целым числом, и перепрофилирует их, если он не является целым числом. Вот основная идея моего кода (слишком много времени для публикации в целом).Как проверить ввод без выхода из цикла while?

do 
{ 
cout << "Menu: Please select one of the following options:" << endl; 
    cout << " 1 - Drop a single chip into one slot." << endl; 
    cout << " 2 - Drop multiple chips into one slot." << endl; 
    cout << " 3 - Drop 5 chips into each slot." << endl; 
    cout << " 4 - Quit the program." << endl; 
    cout << "Enter your selection now: "; 
    cin >> first_input; 
}while (first_input!=4) 

У меня тогда есть несколько операторов if, которые выполняют выражения, основанные на том, какой вариант пользователь выбирает. Я также предлагаю им ввести другие целочисленные значения позже в коде.

Как отправить пользователя обратно в меню, если пользовательские входы не могут ввести целое число и вместо этого вводят символы? Ограничения: Нельзя использовать continue или break

Заранее спасибо.

ответ

0

Вы ищете ключевое слово continue.

+0

Благодарим за отзыв. Есть ли другой способ? Хотя я уверен, что это решило бы, я должен не использовать 'continue'. – Alectris

+0

@ T.Rydalch: Требуется кем или кем? Если у вас есть произвольные противоречия, на которых вам разрешено использовать кусочки C++, я был бы признателен, если бы вы заявили об этом в следующем вопросе, вместо того, чтобы ждать, пока мы уже не ответили. ... –

+0

Хорошо. Мой инструктор курса. – Alectris

0
do 
{ 
    cout << "Menu: Please select one of the following options:" << endl; 
    cout << " 1 - Drop a single chip into one slot." << endl; 
    cout << " 2 - Drop multiple chips into one slot." << endl; 
    cout << " 3 - Drop 5 chips into each slot." << endl; 
    cout << " 4 - Quit the program." << endl; 
    cout << "Enter your selection now: "; 
    cin >> first_input; 
    //lets say if user enters value out of range. then want to show menu again. 
    if(first_input > 4) { 
     cout << "Invalid input "<<endl; 
     continue; 
    } 
    // you can do other stuff here. 
    // ... 
}while (first_input!=4) 
+0

Это не касается проблемы OP "* Как отправить пользователя обратно в меню, если пользовательские входы не могут ввести целое число и вместо этого вводят символы? *" – NoseKnowsAll

1

Если вы хотите вернуться к началу в случае нецелого ввода данных, возможно, что-то вроде этого будет работать?

// Insert after "cin >> first_input;" 
if (cin.fail()) { 
    // Handle non-int value. 

    // Clear error flag. 
    cin.clear(); 

    // Empty buffer up to next newline. 
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); 

    // Complain & restart. 
    cout << "Invalid input. Please try again." << endl; 
    continue; 
} 

Что это такое, это ясный флаг ошибки, очистка буфера и возврат к началу. cin.ignore() явно не должен быть передан std::numeric_limits<std::streamsize>::max() в качестве его первого параметра; однако в случае ошибки я предпочитаю сделать это, чтобы избежать ошибочного ввода. Обратите внимание, что std::numeric_limits определен в стандартном заголовке <limits> и требует его включения.

+0

Спасибо! Ваша помощь очень ценится. – Alectris

+0

@Alectris Добро пожаловать. –

0

Вы можете использовать goto label.

do{ 
    label: 
     // your code 
if(check) goto label; 
}while(check); 

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