Как реализовать работу с потоком в cin

158
11 мая 2019, 19:30

Написал функцию, которая запрашивает ввод пользователя до тех пор, пока он не введёт число (если дробное, то преобразуется в целое с округлением к нулю). После этого поток очищается и возвращается первое введённое число.

Вопрос вот в чём: возможно ли сделать так, чтобы выполнялось условие при вводе больше одного числа в поток? Например, при вводе: 123 4 5

short safeInput() {
short val = 0;
while (!(std::cin >> val)) {
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cout << "Wrong input, only integers are expected!" << std::endl;
}
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return val;

}

Answer 1

Вам просто нужно поменять short val на double val и возвращать из функции val < 0 ? --val : val;. И не важно после правильного ввода еще что введет пользователь...

READ ALSO
Почему некоторые имена недоступны в std?

Почему некоторые имена недоступны в std?

Почему большинство имён стандартной библиотеки доступны с помощью std::, а для некоторых нужно указывать дополнительные пространства? Например,...

186
Работа с функцией VirtualAlloc()

Работа с функцией VirtualAlloc()

Как через Edit ввести параметр dwSize в функции VirtualAlloc()? Когда пишу просто в самой функции размер региона:

211
ImGui - Application.exe has triggered a breakpoint

ImGui - Application.exe has triggered a breakpoint

После того, как в проекте появилась компиляция с CLR, программа падает в следующем куске кода:

202