1

私は d を学ぼうとしているので、hello world から始めて、少し拡張しようとしました。

import std.stdio;
import core.thread;

void main(string[] args){
    writeln("Hello World!");
    Thread.sleep(dur!("seconds")(5));
    writeln("Press enter key to exit...");
    writeln(readln());
}

だから私は私の出力が次のようになることを期待しています

Hello World!
Press enter key to exit...
//input "abcd"
abcd

しかし、代わりに私はこれを得る

//input "abcd"
Hello World!
Press enter key to exit....
abcd

スリープ機能もスキップされます。何が起こっている?

4

1 に答える 1

6

これはよくある質問です。タイトルを読んだとき、IDE が表示されることを期待していましたが、タグ付けされました。リンク先の古い回答が見つかりませんが、短いのは出力とスリープが発生することです。それらはIDEパイプによってバッファリングされるだけで、最後まで表示されません。

stdout.flush();の前readlnおよび/または最初の直後に右を追加すると、writeln出力が表示されます。これにより、他の操作を行う前にバッファーが強制的に画面に移動します。

通常のコンソール出力は 1 行で自動的にフラッシュされますが、IDE はパイプとして認識されます。プログラムはユーザーではなく別のプログラムと話しているため、ユーザーに表示される行ではなくデータブロックごとにバッファリングできると考えています。

于 2016-08-26T12:15:46.883 に答える