正如你的程序现在它会读取 long long's 直到 cin 的运算符 void* 指示读取的值不兼容(但仍然打印 n ,充满垃圾,它无法读取),因为你注意到它忽略了空白线。
如果我理解正确,你想要的是当用户输入一个空行时程序应该输出读取的数字,一个简单的方法是将输入作为字符串读取,然后检查字符串的长度,并使用stringstream 将其转换为适当的类型。
#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;
}
编辑
这是另一种方式,如果您的输入以 形式出现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;
}