Здесь есть несколько проблем. Первый, и самое главное, - то, что большинство систем будет делать линейный ориентированный вход, что означает , что они подберут много контрольных символов (в том числе, , вероятно, ESC) и сделают что-то с ними внутренне, скорее , чем возвращение их вам; возможно, даже не будет когда-либо видеть ESC на входе.
Для остальных существует ряд проблем с кодом. Сначала - это то, что вы тестируете индекс в массиве (где вы поместите следующий символ), а не против чего-либо , который вы прочли. Во-вторых, вы вводите int
, так что вы не увидите никаких персонажей; просто результаты преобразования . (Фактически, если символ ESC делает , вы получите std::cin
в состоянии ошибки.) Третье, что вы никогда не проверяете, прошел ли вход .
Лучшим решением было бы принять какое-то другое соглашение для ввода: произнести по одному номеру в строке, с пустой строкой сигнализации конец. В этом случае, вы могли бы написать что-то вроде: (. Вы заметите, что я использовал std::vector
, так как вы не знаете впереди, сколько входов вы получите)
std::vector<int> a;
std::string line;
std::cout << "..." << std::endl;
while (std::getline(std::cin, line) && !line.empty()) {
std::istringstream parse(line);
int value;
parse >> value >> std::ws;
if (!parse) {
std::cout << "That wasn't an integer, try again" << std::endl;
} else if (parse.get() != EOF) {
std::cout << "Extra garbage at end of line, ignoring it" << std::endl;
} else {
a.push_back(value);
}
}
Если вы действительно хотите использовать ESC, вам, возможно, понадобится третья партийная библиотека по строкам curses
, чтобы выполнить ввод raw, , читающий по одному символу за раз, и собирая цифры в строку, для преобразования используя std::istringstream
.
'main' возвращает' int'. Что означает «это не важно»? –
Что нужно сделать для '27'? –
Посмотрите на это http://stackoverflow.com/questions/17174849/c-how-do-i-terminate-my-programm-using-esc-button –