我正在尝试学习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,你标记了它,所以耶!我找不到我的旧答案链接到,但它的缺点是输出和睡眠确实发生,它们只是由IDE管道缓冲,直到最后才看到。
如果你在readln
之前和/或在第一个writeln
之后添加一个stdout.flush();
,你将看到输出-这迫使缓冲区在做任何其他事情之前进入屏幕。
正常控制台输出将自动刷新一行,但ide被视为管道;程序与另一个程序对话,而不是与用户对话,因此它认为可以按数据块而不是按用户可见行进行缓冲。