为什么它没有endl就包装了;

why does it wrap without endl;?

本文关键字:包装 endl 为什么      更新时间:2023-10-16

我是一个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;.

我错过了什么?

(当然,我对我得到的结果感到满意,但这对我来说是出乎意料的)

这是因为您在输入数字 (-:

"输出"的前两行不是纯输出。它与输入混合在一起。

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

$ stty -echo

小心使用此命令,因为您将无法看到正在键入的下一个命令(stty echoreset可用于再次启用 echo)。

有关更多信息,请参阅此问题:如何关闭终端中的回声?