cin的价值是否保持在某个地方?

时间:2014-03-11 23:05:55

标签: c++

  

编写一个名为copy的函数的定义,该函数读取所有   要在标准输入中读取的字符串并显示它们,一个   在没有其他间距的线上,在标准输出上。不要使用任何类型的循环(for,while等)。

我尝试过类似的事情:

void copy()
{
    string x;
    getline(cin, x);
    cout << x << "\n";
    if(cin){
        copy();
    }
    else{
        return;
    }
}

但我可能不完全理解&#34;所有剩余的字符串都要在标准输入中读取&#34;手段。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

递归是满足教师的奇怪限制的正确理念,但如果您想要存储输入,请查看std::getline以及std::cin的运算符和方法以正确使用在变量等中。当前读取的值存储在名为x的临时字符串中,用于堆栈上函数调用的每个范围。

修改:虽然您在技术上并不需要其他情况,但是在最后一次调用copy();后堆栈将展开,因此它没有什么特别的错误。 #39;无效功能无需返回。

答案 1 :(得分:0)

void copy()
{
    { // create a scope...
        string x;
        if (getline(cin, x))
            cout << x << "\n";  // don't output 'x' when getline fails!
    } // let x go out of scope - less baggage during recursion...
    if(cin)
        copy();
}

这个问题有点含糊......

  

...读取标准输入中剩余要读取的所有字符串,并将其显示在一条没有其他间距的行上,并显示在标准输出上。

是&#34;字符串&#34;有必要像一条线?我怀疑不是的一个原因是因为如果是的话,问题甚至有趣(并且你认为不可能!) - 一个合理的答案:

std::cout << std::cin.rdbuf();

另一个原因是&#34;没有间距&#34; ...也许是指每一行上的前导和尾随空格,或者意图是每个空格分隔的值被认为是一个字符串,您需要哪种情况:

void copy()
{
    {
        string x;
        if (cin >> x);
            cout << x << "\n";
    }
    if (cin)
        copy();
}

任何人都猜到了哪个......