C ++, имеющий cin, считывающий возвращаемый символ

StackOverflow https://stackoverflow.com/questions/150726

Вопрос

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

Это было полезно?

Решение

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

#include <iostream>
#include <string>

std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...

Другие советы

Я нахожу это для пользовательского ввода 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, даже при искаженном вводе.

Делает cin.исходная строка решить вашу проблему?

Чтобы обнаружить, что пользователь нажимает клавишу 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top