方法调用顺序混淆
order of method invocation mixed up
我正在尝试学习 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
睡眠功能甚至被跳过。
发生了什么事?
这是一个常见问题解答,当我阅读标题时,我希望看到一个 IDE 而你标记了它,太棒了!我找不到我对 link 的旧答案,但它的缺点是输出和睡眠确实发生,它们只是由 IDE 管道缓冲,直到最后才看到。
如果您在第一个 writeln
之后的 readln
and/or 之前添加一个 stdout.flush();
,您将看到输出 - 这会强制缓冲区进入屏幕在做任何事情之前。
正常的控制台输出会自动刷新在一行上,但 IDEs 被视为管道;该程序与另一个程序而不是与用户交谈,因此它认为它可以按数据块而不是 user-visible 行进行缓冲。
我正在尝试学习 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
睡眠功能甚至被跳过。 发生了什么事?
这是一个常见问题解答,当我阅读标题时,我希望看到一个 IDE 而你标记了它,太棒了!我找不到我对 link 的旧答案,但它的缺点是输出和睡眠确实发生,它们只是由 IDE 管道缓冲,直到最后才看到。
如果您在第一个 writeln
之后的 readln
and/or 之前添加一个 stdout.flush();
,您将看到输出 - 这会强制缓冲区进入屏幕在做任何事情之前。
正常的控制台输出会自动刷新在一行上,但 IDEs 被视为管道;该程序与另一个程序而不是与用户交谈,因此它认为它可以按数据块而不是 user-visible 行进行缓冲。