Другие уже предложили использовать endl
. Хотя это (не обязательно) плохо, использование endl
очищает буфер потока вместе с записью новой строки. Вопреки смыслу одного из полученных вами ответов, использование endl
делает не помощи (вообще) при переводе новой строки в любую последовательность символов, которую платформа обычно использует для оповещения об окончании линия. Использование newline
гарантированно точно соответствует stream << "\n" << flush;"
. Перевод новых строк в «\ r», или «\ n», или «\ r \ n», или на то, что предпочитает платформа, выполняется на другом уровне, и newline
не имеет к этому никакого отношения.
Однако flush
может (и часто будет) замедлять ваш ввод / вывод, иногда довольно значительно. Пока вы пишете всего несколько строк (например, пару сотен символов), это, вероятно, совершенно не имеет значения. Однако если вы пишете большой файл, использование endl
вместо "\n"
может легко привести к замедлению в 10 раз (на самом деле, я бы даже сказал, что большая часть идеи о том, что iostreams являются медленными стеблями) непосредственно от использования endl
).
Это не значит, что нет никакой причины использовать endl. flush
гарантирует, что все, что было записано в поток, немедленно удаляется из буфера стандартной библиотеки и отправляется в ОС. Если вы хотите обеспечить немедленное отображение, endl
может быть полезным. Аналогично, если вы ведете журналирование, и очень важно, чтобы ваш журнал всегда отражал самое последнее известное состояние программы, endl
может быть (чрезвычайно) полезным, чтобы гарантировать, что написанное вами действительно регистрируется, а не теряется в буфер, когда / если происходит сбой приложения.
Итак, endl
иногда имеет смысл, но, вероятно, в 95% случаев, когда он используется, это действительно неуместно (например, вряд ли удастся достичь чего-либо полезного в любом из ответов на этот вопрос).