если вы «читаете» 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
и т. д.
Если вы хотите использовать r, чтобы нажать клавишу ввода после ввода номера, вам придется обработать это в своем коде.
Если пользователь просто введя одну «вещь» в каждой строке, есть на самом деле простой способ:
#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
.
@AlexandruBarbarosie Нестандартный. – Rapptz
'std :: cin.get()' – 0x499602D2
Отправьте пример программы, чтобы я мог понять более четко. – 0x499602D2