Получение результатов много раз в C ++ - PullRequest
3 голосов
/ 01 октября 2019
#include <iostream>

int main() {
    int fav_num {0};
    bool in_range {false};

    while (in_range == false) {
        std::cout << "Enter your favorite number between 1 and 100: ";
        std::cin >> fav_num;

        if (fav_num < 1 || fav_num > 100 || !std::cin ) {
            std::cout << "===Ops!, invalid choice, please try again.===" << std::endl;
            std::cin.clear();
            std::cin.ignore();
        }
        else {
            std::cout << "Amazing!! That's my favorite number too!" << std::endl; 
            std::cout << "No really!!, " << fav_num << " is my favorite number!" << std::endl;
            in_range = true;
        }
    }
    std::cout << "==================================================" << std::endl;
    return 0;
}

Почему я получаю вывод много раз?

screenshot

1 Ответ

4 голосов
/ 01 октября 2019

Один раз для q, один раз для w, один раз для e.

Проверьте документы на std::basic_istream::ignore. Без параметра пропускается только один символ, поэтому ваш цикл будет проходить через каждый символ один раз, прежде чем он снова примет новый ввод.

Вы хотите, чтобы std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); игнорировал каждый символ до следующей строки.

...