Почему он обертывается без endl;?

Я начинаю С++, и я просто написал эту простую программу:

#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;.

Что мне не хватает?

(Конечно, я доволен результатом, который я получаю, но это неожиданно для меня)

Ответ 1

Это потому, что вы нажимаете Enter после ввода чисел (-:

Первые две строки вашего "выхода" не являются чистым выходом. Он смешивается с входом.

Ответ 2

У терминала есть функция/опция, называемая эхо-сигналом, в которой отображается ввод при вводе. Он по умолчанию включен и приводит к тому, что ваши собственные нажатия Enter появятся в качестве новой строки. Фактически, если вы добавили endl после каждого ввода, это привело бы к появлению пустой строки после каждого номера. В GNU и многих системах UNIX эхо может быть отключено с помощью

$ stty -echo

Будьте осторожны с этой командой, так как вы не сможете увидеть следующие команды, которые вы вводите (stty echo или reset можно использовать для повторного включения эха).

Для получения дополнительной информации см. этот вопрос: Как отключить эхо в терминале?