Консоль Windows следует тому же соглашению об окончании строки, которое предполагается для файлов или, в этом отношении, для реальных физических терминалов. Для правильного перехода к следующей строке необходимо видеть и CR, и LF.
Тем не менее, существует много программной инфраструктуры между программой ANSI C и этой консолью. В частности, любая стандартная функция ввода-вывода библиотеки C попытается сделать правильные вещи, предполагая, что у вас есть такая возможность. Вот почему были определены модификаторы fopen()
* t
и b
для параметра mode
.
При t
(по умолчанию для большинства потоков и, в частности, для stdin
и stdout
), тогда любой напечатанный \n
преобразуется в последовательность CRLF, и для чтения происходит обратное. Чтобы отключить это поведение, используйте модификатор b
.
Между прочим, терминалы, традиционно подключенные к * nix-блокам, включая DEC VT100, эмулируемый XTerm, также нуждаются как в CR, так и в LF. Однако в мире * nix преобразование символа новой строки в последовательность CRLF обрабатывается драйвером устройства tty, поэтому большинству программ об этом не нужно знать, а модификаторы t
и b
оба игнорируются. , На этих платформах, если вам нужно отправлять и получать символы на tty без этой модификации, вам нужно искать stty (1) или системные вызовы, от которых это зависит.
Если ваша другая программа ANSI C избегает ввода-вывода библиотеки C на консоль (возможно, из-за того, что вам нужен доступ к цвету символа консоли и другим атрибутам), то будет ли вам отправлять CR или нет, будет зависеть от того, какие вызовы Win32 API вы используете для отправки символов.