Мне было интересно, как использовать cin
, чтобы, если пользователь не вводит никакого значения и просто нажимает ENTER
, что cin
распознает это как допустимый ввод.
С++, имеющий cin, читает символ возврата
Ответ 1
Вероятно, вы захотите попробовать std::getline
:
#include <iostream>
#include <string>
std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...
Ответ 2
Я нахожу, что для пользовательского ввода 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, даже в лицо искаженного ввода.
Ответ 3
Есть ли cin. getline решить вашу проблему?
Ответ 4
Чтобы обнаружить пользователя, нажимающего клавишу Enter, вместо ввода целого числа:
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
Ответ 5
Попробуйте небуферизировать cin (по умолчанию он буферизируется).