Подтвердить что ты не робот

С++: как проверить, пуст ли буфер cin?

Как вы проверяете, не пользователь ли ничего вводил в команде cin и просто нажал enter?

4b9b3361

Ответ 1

При чтении из std:: cin предпочтительнее не использовать оператор извлечения потока >>, поскольку это может иметь всевозможные неприятные побочные эффекты. Например, если у вас есть этот код:

std::string name;
std::cin >> name;

И я введу John Doe, тогда строка, которая будет читаться из cin, просто сохранит значение John, оставив Doe позади, чтобы прочитать некоторую будущую операцию чтения. Точно так же, если бы я написал:

int myInteger;
std::cin >> myInteger;

И затем введите John Doe, затем cin войдет в состояние ошибки и откажется выполнять какие-либо будущие операции чтения, пока вы явно не очистите его состояние ошибки и не очистите символы, вызвавшие ошибку.

Лучший способ сделать ввод данных - использовать std:: getline, чтобы читать символы с клавиатуры, пока пользователь не наткнется на вход. Например:

std::string name;
getline(std::cin, name); // getline doesn't need the std:: prefix here because C++ has ADL.

ADL означает зависящий от аргумента поиск. Теперь, если я введу John Doe, значение name будет John Doe, и в cin не останется никаких данных. Кроме того, это также позволяет вам проверить, только что нажал пользователь:

std::string name;
getline(std::cin, name);

if (name.empty()) {
    /* ... nothing entered ... */
}

Недостатком этого подхода является то, что если вы хотите читать в форматированной строке данных, int или double, вам придется проанализировать представление из строки. Я лично считаю, что это того стоит, потому что это дает вам более тонкий контроль над тем, что делать, если пользователь вводит что-то недействительное и "охраняет" cin из когда-либо входящего в состояние отказа.

Я преподаю курс программирования на С++ и некоторые лекционные заметки о библиотеке потоков, в которой содержится подробная информация о том, как читать отформатированные данные из cin безопасным способом (в основном в конце главы). Я не уверен, насколько это полезно, но если это полезно, я подумал, что отправлю ссылку.

Надеюсь, это поможет!

Ответ 2

cin не будет продолжать работу с программой, если пользователь не вводит не менее 1 символа (ввод не учитывается). Если пользователь не дает ЛЮБОЙ ввод, cin просто будет ждать, пока пользователь даст ввод, а затем нажмите клавишу ввода.

Ответ 3

Я понял, что могу использовать getline, чтобы не останавливать компилятор в одном месте. Но есть ли способ проверить, введено ли что-то или нет, не нажимая ввод? Ответьте, пожалуйста. Спасибо!

Ответ 4

Простой способ →

{
char X=0; //  ASCII( 0 ) means a NULL value
cin>>X;
if(X==0 || X==10) // ASCII( 10 ) means ENTER
cout<<"User din't enter ANYTHING !! ";
}

Но простая проблема - это....

cin просто не позволит вам двигаться дальше без ввода символа

по характеру здесь я имею в виду DIGIT или алфавит или специальный символ, а не пробел, введите нуль и т.д.

Надеюсь, что это решает вашу проблему, если это не так, я буду рад помочь, просто дайте мне знать.

Ответ 5

int main(){ 
string str[100];
std::cout<<"Hello how are you ? \n";
std::cin>>str;
if(str.length() > 0){
// If input is seen
}
else{
// If input is not seen
}
}

Любая проблема сообщит мне.