如果cin中没有输入任何内容,如何停止递归

How to stop recursion if nothing is inputed in cin?

本文关键字:何停止 递归 任何内 输入 cin 如果      更新时间:2023-10-16

我正在编写一个程序,该程序必须首先打印最后输入的数字。

这是我的代码:

#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,填充了垃圾,无法读取),因为您注意到它忽略了空行。

如果我理解正确的话,你想要的是当用户输入一个空行时,程序应该输出读取的数字,一个简单的方法是将输入作为字符串读取,然后检查字符串的长度,并使用字符串流将其转换为适当的类型。

#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;
}

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