Перевод строки в консольном приложении (C#)
Насколько я знаю, для перевода строки в Windows используется сочетание управляющих символов \r\n. Но при разработке консольного приложения для этой цели можно обойтись только символом \n. Так, если в программе
using System;
namespace Test
{
class Program
{
static void Main()
{
Console.Write("Имя: Иван\r\nФамилия: Иванов");
}
}
}
\r\n заменить на \n, то вывод от этого не изменится. При этом, например, в элементе управления TextBox, значение свойства Multiline которого равно True, приложения Windows Forms написать \n для перевода строки недостаточно, нужно обязательно писать \r\n. Например, если написать такой код:
using System;
using System.Windows.Forms;
namespace TextBoxControls
{
public partial class TextBoxControls : Form
{
public TextBoxControls()
{
InitializeComponent();
}
private void buttonOK_Click(object sender, EventArgs e)
{
textBoxOutput.Text = "Имя: Иван\nФамилия: Иванов";
}
}
}
, то при нажатии на кнопку buttonOK в поле textBoxOutput никакого переноса не будет. Почему такая разница?
Ответы (2 шт):
\r\n - стандарт переноса строки в Windows, он со времен MS-DOS не менялся, имеет аббревиатуру CRLF (Carriage Return Line Feed).
\n - стандарт переноса строки в UNIX (Linux, BSD, и т.д.), имеет аббревиатуру LF.
Почему консоль реагирует одинаково на оба варианта - вопрос к разработчикам консоли в Microsoft, но по стандарту гарантированно в Windows должен работать только стандарт CRLF.
Так как C# - это кроссплатформенный язык, и писать код на нем можно как под Windows, так и под Linux, чтобы решить проблему совместимости кода с обоими стандартами, была придумана переменная окружения Environment.NewLine. И в каком бы окружении вы бы не запустили код, с использованием этой переменной он будет работать.
Попробуйте
"Имя: Иван" + Environment.NewLine + "Фамилия: Иванов"
Подробнее про перенос строки можно почитать в Википедии
Помнится в старых текстовых редакторах CRLF (\r\n) создавал новый абзац (с соответствующим форматированием), а LF (\n) создавал "мягкий" перенос строки без создания нового абзаца. Многострочные абзацы так и создавались. По аналогии сейчас в html <br> — для переноса строк и <p> — для создания абзацев.