Вы можете использовать getline , чтобы прочитать всю строку сразу, затем std :: string в , если вам нужен первый символ, или использовать isstringstream
, если вам нужнопервый номер.
char char1;
std::string input;
getline(std::cin, input);
if (!std::cin.good()) {
// could not read a line from stdin, handle this condition
}
std::istringstream is(input);
is >> char1;
if (!is.good()) {
// input was empty or started with whitespace, handle that
}
Оберните это в функцию, если вы делаете это часто.С учетом вышесказанного, если вы нажмете клавишу ввода напрямую (без ввода символов) или если вы введете данные, начинающиеся с пробела, is
будет !good()
, поэтому char1
будет , а не .
В качестве альтернативы, после того, как вы проверили, что cin
все еще в порядке, вы можете просто:
if (input.empty()) {
// empty line entered, deal with this
}
char1 = input.at(0);
С этим, если строка не пуста, char1
будет установлен впервое char
если input
, что бы это ни было (включая пробелы).
Обратите внимание, что:
is >> char1;
будет читать только первый символ, а не первое число (то же самое сinput.at()
версия).Поэтому, если введено значение 123 qze
, char1
получит '1'
(0x31, если ASCII), а не значение 123. Не уверен, хотите ли вы этого или нет.Если это не то, что вам нужно, прочитайте переменную int
и затем выполните правильное приведение.