方法调用的顺序混淆了

时间:2016-08-26 11:26:56

标签: linux intellij-idea d gdc

我正在努力学习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

睡眠功能甚至被跳过。 发生了什么事?

1 个答案:

答案 0 :(得分:6)

这是一个常见问题解答,当我阅读标题时,我希望看到一个IDE并且你标记了它,所以耶!我无法找到链接到的旧答案,但缺点是输出和睡眠都会发生,它们只是由IDE管道缓冲,直到最后才会显示。

如果您在stdout.flush();之前和/或在第一个readln之后添加writeln,您将看到输出 - 这会强制缓冲区进入屏幕别的什么。

普通控制台输出将自动刷新一行,但IDE被视为管道;该程序与另一个程序而不是用户交谈,因此它认为它可以通过数据块而不是用户可见的行缓冲。