ошибка цикла при вводе чисел

#c

#c

Вопрос:

почему этот цикл выполняется 3 раза при вводе числа? Я хочу, чтобы были приняты только ‘s’ или ‘m’.. как я мог это исправить?

 cout << "Are you married or single (m/s): ";
    cin >> status;
    status = tolower(status); //converting to lower case

    //validating imput for marital status
    while((status != 'm') amp;amp; (status != 's'))
    {
         cout << "Sorry, you must enter "m" or "s" n"
              << "Are you married or single (m/s): ";
         cin >> status;
         status = tolower(status);
    }
  

Ответ №1:

Вероятно, ваша переменная status объявлена как:

 char status;
  

Итак, cin >> status считывает один символ из входных данных. Однако вы, вероятно, ввели более одного, потому что ввод буферизован, и вам нужно было нажать Enter.

Вместо этого используйте это объявление:

 string status;
  

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

Комментарии:

1. Вы должны объяснить, что 3, вероятно, из-за «a r n»

2. rn должно быть автоматически переведено n потоком (я полагаю, это cin происходит автоматически в текстовом режиме)…

Ответ №2:

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

     cout << "Are you married or single (m/s): ";
    getchar(status);

    //validating imput for marital status
    while((status != 'm') || (status != 's'))    //status can be a male OR a female
    {
         cout << "Sorry, you must enter "m" or "s" n"
              << "Are you married or single (m/s): ";
    getchar(status);
    }