Можно ли как-нибудь разрешить пользователю нажимать только клавишу ввода, не вводя никакого ввода, и продолжить работу с программой в std::cin
? Спасибо!
_tprintf(_T("\nENTER CHOICE: "));
cin>>ch;
cin.ignore();
Когда я запускаю программу с этим сегментом кода, есть вероятность, что я вообще не хочу ничего вводить в это поле, когда я нажимаю клавишу ввода, курсор просто создает новые строки.
если вы «читаете в» std::noskipws
, затем читает прекратит пропускать пробелы. Это означает, что когда вы читаете одним символом, вы можете читать пробелами и символами новой строки и тому подобное.
#include <iostream>
#include <iomanip>
int main() {
std::cin >> std::noskipws; //here's the magic
char input;
while(std::cin >> input) {
std::cout << ">" << input << '\n';
}
}
при запуске с вводом:
a
b
c
производит:
>a
>
>
>b
>
>
>c
Итак, мы можем видеть, что это читается в письме a
, затем клавишу ввода после новой строки, затем пустая строка, затем буква b
, так далее.
Если вы хотите, чтобы пользователь нажимал клавишу ввода после ввода числа, вам придется обрабатывать это в своем коде.
Если пользователь просто вводит одну «вещь» в строку, на самом деле есть более простой способ:
#include <iostream>
int main() {
std::string line;
while(std::getline(std::cin, line)) {
std::cout << line << '\n';
}
}
Это будет считывать символы из ввода до конца строки, что позволит вам читать строки с пробелами или строки, в которых вообще ничего нет. Имейте в виду, что после использования std::cin >>
он обычно оставляет клавишу ввода новой строки во вводе, так что если вы делаете std::getline
сразу после него вернется пустая строка. Чтобы избежать этого, вы можете использовать std::cin.ignore(1, '\n')
чтобы он игнорировал символ новой строки, прежде чем пытаться использовать std::getline
,
Если я правильно понял ваш вопрос, вы можете просто проверить, равен ли вход ""
; если это не так, не продолжайте запрашиваемое действие.
РЕДАКТИРОВАТЬ: О, теперь, когда вы редактировали свой вопрос, я понял, что вы хотите. Просто используйте cin.ignore();
, Вам не нужно cin >>
что-нибудь до этого.
Нет, вы не можете использовать cin
сделать это.
Если вы нажмете ВОЙТИ клавиша, когда программа ожидает ввода, cin
будет полностью игнорировать новую строку (так же, как он игнорирует пробелы из-за skipws
), сохраните символ новой строки в потоке ввода и продолжайте запрашивать ввод. Если он не получит действительный вход для соответствующего типа или не встретит EOF, он будет продолжать запрашивать у вас ввод.
Использовать getline
функция вместо
#include <string>
...
cout << "Enter Something\n";
string a;
getline(cin, a);