主に某氏向け説明。
ちなみに、この件はきちんと調べていません。
この文章は、単に遭遇した状況を某氏に説明するためにだけ書かれています。
LFで復帰改行(?) §
Windowsの改行コードはCR(復帰)/LF(改行)です。ですから、WindowsのコンソールにCR/LFを送ると改行します。しかし、LFだけ送っても復帰改行するようです。
以下のようなプログラムで、標準出力をバイナリモードにして出力させて遭遇。
サンプルはVisual Stdui 2008用のC言語ソース(not C++ソース)です。
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
int main()
{
setmode(_fileno(stdout),_O_BINARY);
puts("Hello\nWorld");
return 0;
}
結果は、スクリーンキャプチャ貼るのが面倒なので略しますが、Hの真下にWが出力されます。
入力モードではない §
これは入力のモードとは関係ないようです。以下のように入力行の編集機能を切ってバイナリモードにしても結果は変わりません。
#include <windows.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
int main()
{
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),0);
setmode(_fileno(stdin),_O_BINARY);
setmode(_fileno(stdout),_O_BINARY);
puts("Hello\nWorld");
return 0;
}