C ++:当我使用Ctrl + d结束输入循环时,为什么我的最后一个输入没有被拾取?

时间:2016-09-29 20:13:45

标签: c++

我是C ++的新手,这是我的代码:

int main(int argc, const char * argv[]) {

    vector<double> nums;
    double input;
    while (cin >> input) {
        nums.push_back(input);
    }

    for (int i = 0; i < nums.size(); i++) {
        cout << nums[i] << endl;
    }

    return 0;
}

当程序运行时,我以这种方式输入3个数字:

Enter numbers: 1 2 3

在我输入3后,我立即按ctrl+denter。但是,只打印两个数字。

如果我在输入3后立即按enter, ctrl+d, enter,则会打印三个数字。

我想如何打印所有3个数字,无论我先按哪个键。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的C ++代码很好。它是shell中导致此问题的终端设置。在提交行之前,不会解释在Linux终端中键入的^ D(^ D暗示Unix或Mac)。要检查我的断言是否正确,请创建一个这样的文件:

echo -n 1 2 3 > /tmp/stuff.txt

现在仔细检查文件中没有终止换行符

cat /tmp/stuff.txt

你会注意到缺少换行符。现在运行您的程序 - 该程序正常 - 对文件

./a.out < /tmp/stuff.txt

工作正常。