C ++: как проверить, пуст ли буфер cin? - PullRequest
28 голосов
/ 15 февраля 2011

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

Ответы [ 4 ]

41 голосов
/ 15 февраля 2011

При чтении из 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 от перехода в состояние сбоя.

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

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

3 голосов
/ 15 февраля 2011

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

0 голосов
/ 15 февраля 2011

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

{
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 просто не позволит вам двигаться дальше без ввода символа

здесь символом я имею в виду ЦИФРУ или алфавит или специальный символ, а не пробел, введите ноль и т. Д.

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

0 голосов
/ 15 февраля 2011
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
}
}

Любая проблема, дайте мне знать.

...