Я нашел эту ссылку на http://www.parashift.com/c++-faq-lite/istream-and-ignore.htmlC++ Пример: Невозможно понять, что делается?
, который показывает «Как я могу получить std :: cin, чтобы пропустить недопустимые символы ввода?»
Use std::cin.clear() and std::cin.ignore().
#include <iostream>
#include <limits>
int main()
{
int age = 0;
while ((std::cout << "How old are you? ")
&& !(std::cin >> age)) {
std::cout << "That's not a number; ";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
std::cout << "You are " << age << " years old\n";
...
}
Of course you can also print the error message when the input is out of range. For example, if you wanted the age to be between 1 and 200, you could change the while loop to:
...
while ((std::cout << "How old are you? ")
&& (!(std::cin >> age) || age < 1 || age > 200)) {
std::cout << "That's not a number between 1 and 200; ";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
...
Here's a sample run:
How old are you? foo
That's not a number between 1 and 200; How old are you? bar
That's not a number between 1 and 200; How old are you? -3
That's not a number between 1 and 200; How old are you? 0
That's not a number between 1 and 200; How old are you? 201
That's not a number between 1 and 200; How old are you? 2
You are 2 years old
Я не могу понять, как это делается> Может ли кто-нибудь объяснить, пожалуйста?
У меня есть сомнения с:
while ((std::cout << "How old are you? ")
&& !(std::cin >> age))
Как это проверить действительную запись? Я хочу попросить выражения: «std :: cout < <« Сколько вам лет? »И«! (Std :: cin >> age) », верните true или false, которые являются ANDed?
другая вещь, которая это заблуждение является использование,
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Что есть цель? Искал на Google об этих функциях, но до сих пор я не ясно. в частности, std::numeric_limits<std::streamsize>::max()
Может ли один помочь? Спасибо
cin.clear() и cin.ignore() для предотвращения КИН для пропуску, (если не ошибаюсь). Во-первых, я думаю, это неправильно, когда вас спрашивают. – cakil