Подтверждение Y \ N

400
09 февраля 2017, 01:00

Необходимо спрашивать юзера, уверен ли он в количестве потоков, которое ввел

while (true) {
        int newThreadCount;
        string choice;
        cout << "Количесво потоков: ";
        cin >> newThreadCount;
        cout << endl;
        if (newThreadCount > boost::thread::hardware_concurrency()*2) {
            cout << "Указанное количество потоков сильно превышает количество ядер процессора, прироста производительности не будет. Продолжить? (y\n)";
            while (true) {
                getline(cin, choice);
                if (choice == "n")
                    break;
                else if (choice == "y")
                    break;  
            }
        }
    }
*Код, выполняемый после подтверждения*

Как правильно организовать подтверждение (y\n)? Если ввел y, то код должен продолжаться, если n - должно повторно спрашивать кол-во потоков, если он ввел не y\n, то должно код должен требовать ввести y либо n.

Answer 1

Ну, если нужно обязательно ввод в нижнем регистре и именно y/n (т.е. yes - неверный ввод), то, например, так:

bool yes()
{
    string s;
    for(;;)
    {
        cout << "(y/n)? ";
        if (!getline(cin,s,'\n')) return false;
        if (s == "y") return true;
        if (s == "n") return false;
        cout << "Wrong input! ";
    }
}
Answer 2

Пример из книги Бьерна Страуструпа, но он с количеством попыток - tries

...

int tries = 1;
while (tries < 4)
    {
      cout << "Do you want to proceed (y or n) ?\n";
      char answer = 0;
      cin >> answer; //считать ответ
      switch (answer)
        {
          case 'y':
              return true;
          case 'n':
              return false;
          default:
              cout<<"Sorry, I don't understand that.\n" ;
              tries = tries + 1;
        }
    }
Answer 3

Проект Visual Studio 2015: кириллица в консоли на вводе и выводе.

READ ALSO
Программа не принимает русский ввод [дубликат]

Программа не принимает русский ввод [дубликат]

На данный вопрос уже ответили:

378
Как увеличить double? [дубликат]

Как увеличить double? [дубликат]

На данный вопрос уже ответили:

379
Cannot convert &#39;wchar_t *&#39; to &#39;char *&#39;

Cannot convert 'wchar_t *' to 'char *'

При компиляции кода:

320
При выводе на экран появляются лишние переводы строк

При выводе на экран появляются лишние переводы строк

Добрый день, помогите разобратьсяПри выводе на экран файла в обратном порядке появляются лишние переводы строки

348