【问题标题】:Implement a function that would read a sequence of values from an input stream as an argument实现一个函数,该函数将从输入流中读取一系列值作为参数
【发布时间】:2011-11-14 07:54:26
【问题描述】:

在一本 C++ 书中给我尝试的一个问题中,有人告诉我创建一个函数,该函数将输入流作为参数,其值是存储在流中序列中的 int。

现在我得到的声明是这样的:

foo(istream &arg);

但我似乎无法理解如何获取输入流中的值并将其存储在另一个变量中。谁能帮帮我,给我一个我能理解的简单例子?

谢谢。

【问题讨论】:

  • istream>> 运算符可能是一个很好的起点。

标签: c++ stream


【解决方案1】:

不清楚你不明白什么。要读取单个值,您 在流上使用 >> 运算符。要读取多个值,您 多次使用>>;如果你想阅读整个流,你循环 直到输入失败。要存储值,请使用std::vector<int>, 使用push_back 插入每个值。

当然,有经验的 C++ 程序员更有可能使用 std::istream_iterator<int>直接初始化向量:

std::vector<int>
foo( std::istream& inputStream )
{
    return std::vector<int>
        (std::istream_iterator<int>( inputStream )),
        (std::istream_iterator<int>()) );
}

然而,问题的目的似乎是学习如何编写 循环,因此出于学习目的,您可能应该编写自己的循环。

【讨论】:

    【解决方案2】:

    流使用流操作符,例如:

    std::cout << "enter an integer number: ";
    

    int x;
    std::cin >> x;
    

    由于这看起来像家庭作业,我将在此提示。

    正如您猜想的那样,std::cinistream(输入流)的示例,std::coutostream(输出流)的示例

    【讨论】:

    • 看,这部分问题对我来说并不难。我的问题是,一旦我得到一个具有多个值的引用流,我怎样才能单独获取每个值。我知道我可以做 arg >> x >> y >> z 但我想按照 arg >> x 的方式做一些事情,并继续从 arg 抓取值到 x 并在 arg 流中没有任何内容时循环。
    • while (std::cin &gt;&gt; x) { /*do stuff?*/ }(作为记录,您的问题确实说过'我将如何获取输入流中的值'?!)
    【解决方案3】:

    您想保留在您的istream 中给出的值,还是将它们丢弃(例如等待用户在继续程序的另一部分之前按下 ENTER 键)?

    您可能需要std::getline,它将读取所有内容到下一个换行符,并将整个块存储到您可以解析(或丢弃)的字符串中。

    如前所述,&gt;&gt; 将一个接一个地读取另一个值(通常以空格分隔),因此您可以将第一个输入存储到变量 x,第二个存储到 y,第三个存储到 @ 987654326@ 等(如果你想变得非常花哨,你甚至可以将它们推送到 vectorlistdeque 或任何其他您选择的容器类型中。)

    【讨论】:

      猜你喜欢
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多