cout << "Please enter your number: ";
cin >> Number;
cout << "Is this spaced";
これには、目に見える以上のものがあります。 std::cout
およびstd::cin
- デフォルトでは -関連付けられたストリームです。つまり、入力が要求さstd::cout
れるたびに自動的にフラッシュされます (つまり、プログラム内のバッファーからオペレーティング システムにフラッシュされる保留中の出力) 。そのため、プログラムが一時停止して入力を待つ前に、std::cin
確実に確認できます。"Please enter your number: "
もちろん、ほとんどのオペレーティング システムでは、プログラムが待機する前に入力を開始できます。入力を端末にエコーし、std::cin
後で提供するために記憶します。これは、次のようなパイプラインを使用してプログラムを呼び出した場合にも発生します。
echo "123" | the_program
入力は実行開始時に利用可能ですが、解析を試みるthe_program
ためにそこにとどまります。cin >> Number;
ただし、この場合、端末プログラムがエコーするキーボード入力がないため、「123\n」シーケンスは出力の 2 行間で画面にエコーされません。その改行「\n」がなければ、出力はすべて1行で表示されます。
キーボード入力でカーソルを次の行に移動させずにキーボードから読み取りたい場合は、ncurses または同様のライブラリを使用するのが最善です。ライブラリは、お使いの端末に適したエスケープ シーケンス (利用可能な場合) を使用して、カーソルの位置を好みに合わせて変更できます。サポートする端末の範囲が非常に限られている場合 (たとえば、xterm 互換の端末、VT220、または Windows コマンド シェルなど) は、自分でコーディングするのが実用的かもしれません。キーボード入力の出力を抑制することも一般的に可能ですが、ユーザーは自分が数字を入力しているのを見ることができませんでした。別のオプションは、端末を文字ごとの入力読み取りをサポートする入力モードに設定することです (一部の端末はデフォルトで行ごとに設定されるため、'
これとは別に、一部の呼び出し環境では最終行が表示されないため、プログラムの出力を改行で終了することをお勧めします。また、多少論争の的std::endl
になりますが、出力をフラッシュする必要がない場合は使用しないことをお勧めします\n
。C++ iostream ライブラリを使用して複数の行をバッファリングし、効率的なサイズのチャンクでオペレーティング システムに書き込みます。
フラッシングの説明
次のようなプログラムがあるとします。
std::string h = "hello ";
std::string w = "world";
std::cout << h;
std::cout << w << '\n';
ある段階で、プログラムはオペレーティング システム (Linux、Windows など) に印刷するテキストを伝える必要があり、それをシェル/コマンド プロンプトに送信できるようにします (画面に送信してバッファーに入れる場合があります)。スクロールバーなど)、ファイルなど。大まかに言うと、プログラムがオペレーティング システムにこの種のことを行うように指示するのは遅いため、"hello" を記憶し、"world" と\n
(改行) を追加すると、プログラム全体がより速く動作します。次に、"hello world\n" をオペレーティング システムに一斉に送信します。プログラム内でのデータの格納と連結はバッファリングと呼ばれ、バッファからオペレーティング システムにデータを書き込む動作はフラッシュと呼ばれます。