Вы можете использовать std::ws
, чтобы отбросить ведущие пробелы из входного потока.
#include <iostream>
#include <string>
int main()
{
int a1, a2, a3, a4;
std::cin >> a1 >> a2 >> a3 >> a4;
std::string a;
std::getline(std::cin >> std::ws, a);
return 0;
}
cin
фактически хранит целое число и '\n'
во входном буфере.
Поэтому, когда поток достигает заявления getline
, он получает только '\n'
.
В любом случае чтение в цифрах напрямую проблематично: когда cin
представлен с входом он не может обработать, он переходит в состояние строя.
Вход, который он не может обработать, остается на входном потоке и игнорируется до тех пор, пока не будет сброшено состояние «fail» (std::cin.clear()
).
Таким образом, вы должны проверить и посмотреть, если входной поток является недействительным (!std::cin
):
std::cin >> a1;
if (!std::cin)
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
// Get the input again/handle the error
}
Что вы подразумеваете под "can not input"? Любые ошибки? – songyuanyao
только это, когда дело доходит до ввода, программа закрывается –
Как вы их вводили? Я попробовал демонстрацию [здесь] (http://rextester.com/TGTZ9945). – songyuanyao