gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:33:52 25 4
gpt4 key购买 nike

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

这是我的代码:

#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' 进行比较,以测试用户是否按下了 enter,如果是这种情况,它会打印刚刚读取的数字,而无需等待下一个数字

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

关于c++ - 如果 cin 中没有输入任何内容,如何停止递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6348868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com