Я новичок в С++ и все еще пытаюсь понять, как работают потоки ввода/вывода.
В настоящее время я пытаюсь написать функцию, чтобы убедиться, что пользователь вводит int, и сообщить им, является ли ввод пустым или недействительным int.
Я использую getline и пробовал использовать cin.clear и cin.ignore, но я не могу заставить это работать и понятия не имею, где я ошибаюсь.
Это работает, если я ввожу букву, однако, если я просто нажимаю ввод без ввода, он не говорит, что ввод не обнаружен.
void testStuff()
{
string number;
ws(cin);//skips Whitespaces
if (getline(cin, number) && number.end() !=
find_if_not(number.begin(), number.end(), &isdigit))
{
if (number.empty())
{
cout << "No input detected" << endl;
testStuff();
}
cout << "Please input a Valid number" << endl;
testStuff();
}
}
find_if_not
, этоnumber.end()
.number.end() == number.end()
и тело не введено. - person user4581301   schedule 08.11.2017ws
работает как указано, вы не сможете ввести пустой ввод. Если вы просто нажмете клавишуenter
, это будет прочитано как символ новой строки, который классифицируется как пробел (т. е.isspace('\n') == true
). Для вызоваgetline
вы должны ввести что-то, кроме пробелов, поэтому то, что вы читаете с помощьюgetline
, не может быть пустым. - person Jerry Coffin   schedule 08.11.2017getline
, пользователь должен ввести что-то, что не является пробелом. Когда вызывается getline, этот непробельный символ должен находиться во входном буфере, поэтому то, что он читает, не может быть пустым. - person Jerry Coffin   schedule 08.11.2017