Поскольку ваша программа прямо сейчас, она будет читать длинные long, пока оператор cin void * не покажет, что прочитанное значение не было совместимым (но все равно печатает n, заполненное мусором, которое не удалось прочитать), как вы заметилиигнорирует пустые строки.
Если я правильно понимаю, вы хотите, чтобы, когда пользователь вводит пустую строку, программа выводила прочитанные числа, простой способ сделать это - прочитать ввод в виде строки, а затем проверитьдлина строки и используйте поток строки для преобразования его в соответствующий тип.
#include <iostream>
#include <sstream>
#include <string>
void recursive()
{
std::string input;
long long n;
if ( std::getline(std::cin,input) && input.length() > 0 )
{
std::istringstream ss(input);
if (ss >> n)
{
recursive();
std::cout << n << std::endl;
}
}
}
int main ()
{
recursive();
return 0;
}
edit
Вот другой способ, если ваш ввод поступает в виде 46 798 4163 4654 32132
, он использует std :: cin.peek (), который возвращает следующий символ во входных данных, не извлекая его, результат peek () сравнивается с '\ n', чтобы проверить, нажал ли пользователь ввод, и если это такон печатает только что прочитанный номер, не дожидаясь следующего номера
#include <iostream>
#include <sstream>
#include <string>
void recursive_in_a_line ()
{
long long n;
if (std::cin >> n)
{
if (std::cin.peek() != '\n')
{
recursive();
}
std::cout<< n << std::endl;
}
}
int main ()
{
recursive_in_a_line();
return 0;
}