Похоже, что решение этого, действительно, намного проще с использованием scanf("%[^\t ]", buffer)
. Если вы хотите сделать это с помощью C++ IOStreams, я считаю, что наиболее подходящим вариантом является установка std::locale
с измененной фасеткой std::ctype<char>
, которая использует модифицированную интерпретацию того, что считается пространством, а затем читает std::string
(см., Например, this answer Я дал для аналогичной задачи). Независимо от того, используете ли вы подход C или C++, вам, вероятно, необходимо отключить буферизацию линии на стандартном входе, если вы хотите узнать о пространстве или вкладке, когда она была введена, а не когда вся строка будет передана вашей программе ,
Поскольку вход обычно буферизирован в строке, я не думаю, что это легко сделать. – Xeo
Если вход является интерактивным, терминал обычно не отправляет контент до тех пор, пока не будет введена полная строка (ввод отправляется после ввода пользователем клавиши «возврат»). Если вы ожидаете ввести имя и попросите свою программу реагировать на каждый пробел или символ табуляции, вы будете немного удивлены. –
У C++ нет понятия «нажатие клавиши». Вам понадобится библиотека обработки терминала для конкретной платформы. Попробуйте 'ncurses'. –