Как вы проверяете, не пользователь ли ничего вводил в команде cin и просто нажал enter?
С++: как проверить, пуст ли буфер cin?
Ответ 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
}
}
Любая проблема сообщит мне.