如果cin中没有输入任何内容,如何停止递归
How to stop recursion if nothing is inputed in 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,填充了垃圾,无法读取),因为您注意到它忽略了空行。
如果我理解正确的话,你想要的是当用户输入一个空行时,程序应该输出读取的数字,一个简单的方法是将输入作为字符串读取,然后检查字符串的长度,并使用字符串流将其转换为适当的类型。
#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循环中读取数字,并将它们添加到容器(列表或向量)中,然后显示容器的内容。
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 在迭代模板类型列表时无法停止递归
- 使用参数推导时如何停止模板递归?
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 回文递归不停止
- Word.exe 已停止使用递归工作
- 是否有可能摆脱模板专用化以停止递归
- 模板递归不会停止
- 尽管有停止条件,无限递归调用仍会执行,因为参数不会前进
- 递归不会停止
- 在复杂的代码中,递归似乎不会停止
- 如何停止递归
- 基例如何影响使用递归函数的哪些行
- 停止递归算法
- 如果cin中没有输入任何内容,如何停止递归
- c++递归归并排序程序停止工作