C ++, имеющий cin читает возвращаемый символ - PullRequest
12 голосов
/ 30 сентября 2008

Мне было интересно, как использовать cin, чтобы, если пользователь не вводит какое-либо значение и просто нажимает ENTER, cin распознает это как действительный ввод.

Ответы [ 5 ]

15 голосов
/ 30 сентября 2008

Возможно, вы захотите попробовать std::getline:

#include <iostream>
#include <string>

std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...
5 голосов
/ 30 сентября 2008

Я считаю, что для пользовательского ввода std::getline работает очень хорошо.

Вы можете использовать его, чтобы прочитать строку и просто отказаться от того, что она читает.

Проблема с такими вещами,

// Read a number:
std::cout << "Enter a number:";
std::cin >> my_double;

std::count << "Hit enter to continue:";
std::cin >> throwaway_char;
// Hmmmm, does this work?

в том случае, если пользователь вводит другой мусор, например «4.5 - о» слишком легко выйти из синхронизации и прочитать то, что пользователь написал в последний раз, прежде чем распечатать приглашение, которое ему нужно увидеть в следующий раз.

Если вы читаете каждую полную строку с помощью std::getline( std::cin, a_string ), а затем анализируете возвращенную строку (например, с помощью istringstream или другого метода), гораздо проще синхронизировать напечатанные подсказки с чтением из std :: cin, даже в лицо искаженного ввода.

2 голосов
/ 13 марта 2015

Чтобы обнаружить пользователя, нажимающего клавишу ввода вместо ввода целого числа:

char c;
int num;

cin.get(c);               // get a single character
if (c == 10) return 0;    // 10 = ascii linefeed (Enter Key) so exit
else cin.putback(c);      // else put the character back
cin >> num;               // get user input as expected

В качестве альтернативы:

char c;
int num;
c = cin.peek();           // read next character without extracting it
if (c == '\n') return 0;  // linefeed (Enter Key) so exit
cin >> num;               // get user input as expected
2 голосов
/ 30 сентября 2008

Решает ли ваша проблема cin. getline ?

0 голосов
/ 30 сентября 2008

Попробуйте снять буферизацию cin (по умолчанию она буферизована).

...