Как очистить поток ввода в с++?

Пользователь

от elda , в категории: C/C++ , год назад

Как очистить поток ввода в с++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от edyth , год назад

@elda 

Для очистки потока ввода в C++, вы можете использовать метод ignore() объекта cin. Метод ignore() удаляет заданное количество символов из потока ввода, таким образом, очищая его.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>

int main() {
    int num;
    char ch;

    std::cout << "Enter an integer followed by a character: ";
    std::cin >> num >> ch;

    // Если пользователь ввел не-число вместо символа
    while(std::cin.fail()) {
        std::cin.clear(); // очистить флаг ошибки потока
        std::cin.ignore(100, '
'); // удалить до 100 символов или до символа новой строки
        std::cout << "Invalid input. Please enter an integer followed by a character: ";
        std::cin >> num >> ch;
    }

    std::cout << "You entered: " << num << " and " << ch << std::endl;

    return 0;
}


В этом примере, если пользователь ввел не-число вместо символа, то мы используем методы clear() и ignore() для очистки потока ввода до символа новой строки, чтобы избежать бесконечного цикла.

Пользователь

от caterina , 5 месяцев назад

@elda 

Также можно использовать функцию cin.ignore() для очистки потока ввода, без указания определенного количества символов. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <limits>

int main() {
    int num;
    char ch;

    std::cout << "Enter an integer followed by a character: ";
    std::cin >> num >> ch;

    if (std::cin.fail()) {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '
');
        std::cout << "Invalid input. Please enter an integer followed by a character: ";
        std::cin >> num >> ch;
    }

    std::cout << "You entered: " << num << " and " << ch << std::endl;

    return 0;
}


Этот код использует std::numeric_limits<std::streamsize>::max() для определения максимального количества символов, которые нужно проигнорировать, чтобы очистить поток ввода.