为什么它没有endl包裹;?

时间:2016-01-27 11:36:56

标签: c++

我是C ++初学者,我刚写了这个简单的程序:

#include <iostream>

using namespace std;

int readNumber()
{
    cout << "Insert a number: ";
    int x;
    cin >> x;
    return x;
}

void writeAnswer(int x)
{
    cout << "The sum is: " << x << endl;
}

int main()
{
    int x = readNumber();
    int y = readNumber();
    int z = x + y;
    writeAnswer(z);
    return 0;
}

我不明白为什么输出是这样的:

Insert a number: 3
Insert a number: 4
The sum is: 7

而不喜欢:

Insert a number: 3Insert a number: 4The sum is: 7

因为在readNumber函数中没有endl;

我错过了什么?

(当然我对我得到的结果感到满意,但这对我来说意外)

2 个答案:

答案 0 :(得分:18)

这是因为你在输入数字后按 Enter ( - :

你&#34;输出的前两行&#34;不是纯粹的输出。它与输入相混合。

答案 1 :(得分:4)

终端有一个名为echo的功能/选项,它会在您键入时显示输入。它默认启用,并使您自己按Enter键显示为换行符。实际上,如果您在每次输入后附加endl,则会导致在每个数字后面出现一个空行。在GNU和许多UNIX系统上,可以使用

禁用echo
$ stty -echo

请注意此命令,因为您将无法看到正在键入的下一个命令(stty echoreset可用于再次启用回声)。

有关详细信息,请参阅此问题:How do I turn off echo in a terminal?