1

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

所以这是我的代码:

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

知道如何在没有输入任何内容时停止功能吗?或者如何以另一种方式解决问题?

谢谢

4

2 回答 2

1

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

于 2011-06-14T19:26:32.893 回答
1

正如你的程序现在它会读取 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;
}
于 2011-06-14T20:18:16.507 回答