【问题标题】:Terminating a while(cin >> s) loop. Accelerated C++终止 while(cin >> s) 循环。加速 C++
【发布时间】:2015-12-02 00:06:12
【问题描述】:

我几乎可以肯定有人问过这个问题,但经过长时间的搜索,我仍然找不到答案。我从 Accelerated C++ 中提取了这段代码,但在终止 while 循环时遇到了问题。代码在这里:

#include <iostream>
#include <vector>

using namespace std;

istream& read(istream& in, vector<double>& vec)
{
    cout << "start reading" << endl;
    if (in) {
        vec.clear();
        double x;
        while (in >> x) {
            cout << "x=" << x << endl;
            vec.push_back(x);
        }
        in.clear();
    }
    cout << "end reading" << endl;
    return in;
}

int main() {
    vector<double> vec;
    read(cin, vec);
    return 0;
}

我输入1 2 3 4 5 键入EOF(MacOS 上的Ctrl-D)程序不会终止。我可以继续在向量中输入值:

start reading
1 2 3 4 5 x=1
x=2
x=3
x=4
x=5


5
x=5
6
x=6
7
x=7

我在这里找到的最接近的问题: http://www.cplusplus.com/forum/beginner/49993/

【问题讨论】:

  • 当标准输入来自文件时它是否终止(如mypog &lt; inputfile)?
  • 另外,您的代码存在问题:只有 coutwhile 循环内,vec.push 在循环外,即使缩进表明您打算这样做在循环内(它应该在哪里)。在两条线周围使用花括号。
  • 如果你在终端运行cat(不带参数),当你按下Ctrl-D时它会终止吗?
  • 关于cat 它只适用于Ctrl-D。但我找到了答案!在下面检查它。并感谢您对花括号的评论......我真丢脸:)

标签: while-loop cin terminate accelerated-c++


【解决方案1】:

好的,问题是在 mac 中我应该执行以下操作:按 ctrl-D 发出信号并结束 stdin,然后按 enter 键返回缓冲区。 更多:https://discussions.apple.com/thread/2361809

【讨论】:

  • 您可能想在回答中提到原因是标准输入是行缓冲的:您的程序仅在一行完成或缓冲区已满(很长的行)后才获得输入。跨度>
猜你喜欢
  • 2014-03-16
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
相关资源
最近更新 更多