istream_iterator复制示例一直等待输入

时间:2018-05-10 04:17:06

标签: c++ c++-standard-library istream-iterator

我尝试从“C ++标准库”的第107页实现流迭代器的示例。我被困在这条线上:

<div class="container">

  <div class="row">

    <div class="col-sm-6">
      <p>COLUMN 1 title</p>
      <p>COLUMN 1 PIES</p>
      <p>COLUMN 1 TIRES</p>
    </div>

    <div class="col-sm-6">
      <p>COLUMN 2 TITLE</p>
      <p>COLUMN 2 SNEAKERS</p>
      <p>COLUMN 2 GUITARS</p>
    </div>    

  </div>
</div>

程序在这里继续从控制台读取数据,但不会传递到下一行。我如何继续这一点?

2 个答案:

答案 0 :(得分:2)

From cppreference:

  

默认构造的var myQuery = from s in Students join f in Faculties on s.FID equals f.FID group f by f.FLast + ' ' + f.FFirst into grp select new { StaffName = grp.Key //give column headers aliases , count = grp.Count() }; myQuery.ToList().OrderBy(w=>w.StaffName)//order it by the staff name .Dump(); 被称为    end-of-stream 迭代器。当有效std::istream_iterator 到达时   在底层流的末尾,它变得等于流结束   迭代器。取消引用或递增它会进一步调用undefined   行为

加入

换句话说,std::istream_iterator一直持续到std::istream_iterator<string>(std::cin)的输入结束。这不会发生在行的末尾,而是发生在文件结束处。在控制台中,有specific commands to trigger the EOF

  

在UNIX系统中,它是 Ctrl + D ,在Windows Ctrl + Z

答案 1 :(得分:0)

例如,如果您已经创建了int的输入流,那么您将输入类似于 - 45 56 45345 555 .....的输入,因此在所有这些情况下,输入流的读取操作将返回真实的价值 - while (cin>>var) { } 如果获得有效输入,while语句将不会停止,因此为了停止读取字符,我们在输入后给出了它,... 54 56 3545 | ,一旦收到特殊字符,while循环就会在条件返回false时停止。

对于所有其他类型的输入流,情况也是如此。

所以我假设你理解为什么你的字符串类型输入流永远不会停止输入,因为每个可能的输入都可以被认为是字符串。

此问题的解决方案是在UNIX中使用&#34; ctrl + D&#34;和&#34; ctrl + Z在windows&#34;中,因为它在while循环条件下给出NULL,这意味着为false,因此停止读取字符串输入。