如果在cin中未输入任何内容,如何停止递归?

| 我正在编写一个程序,该程序必须首先打印最后输入的数字。 所以这是我的代码:
#include <iostream>
using namespace std;
void recursive()
{
    long long n;

     if((cin>>n)&&(!cin.eof())) // Dont work because enter is ignored in cmd window os 
          recursive();

    cout<<n<<endl;
    return;
}
int main()
{
    recursive();
    return 0;
}
知道什么都不输入时如何停止功能吗?或如何以其他方式解决问题? 谢谢     
已邀请:
        由于您的程序现在是正确的,它将读取long long的值,直到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;
}
编辑 这是另一种方式,如果您输入的格式为ѭ2it,它将使用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;
}
    

bab

        您是否必须以递归方式实现该程序? 另一种不使用递归的解决方案是在while循环中读取数字并将其添加到容器(列表或向量)中,然后显示容器的内容。     

要回复问题请先登录注册