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您将看到输出 - 这会强制缓冲区在执行任何其他操作之前进入屏幕。

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

于 2016-08-26T12:15:46.883 回答