d,奇怪的io刷新.
过去如下代码,第二条消息发送到标准输出之后抛ConvException.现在,第2条不显示.输出已刷新,但在输出异常后.
import std.stdio;
void main() {
int a;
write("请输入整:");
readf("%s", &a);
int b;
write("请输入另一整:");
readf("%s", &b);//用` %s`替代,又正常了.
}
当前行为,很奇怪,在刷新stdout前,打印了readf错误.
默认是在换行符上刷新,这里无换行符.
但另一个规则是从标准输入读取会自动刷新标准输出.
目前假设是有人改变了标准错误与标准输出顺序.这就是为什么输出现在让我更加困惑.
我断定有个功能,可链接(或锁定或连接?)输出流至输入流,这样从输入流中读取将自动刷新输出流.
你可能混淆了文件/io流.
对流和cin/cout,如下工作,
std::cin.tie(nullptr); // 解绑定cin和cout
std::cin.tie(&std::cout);//绑定cin和cout(默认)
这是更通用功能.
:就是它,我记成链接了.
谢谢你.一定是这样的.
不管自动刷新是否标准,至少终端中是这样.我在无version=input时运行以下程序时,输出为1024个字符的波.(大约3秒后出现第一波.)
但是,当我使用version=input运行它时,我看到在输入前,输出自动刷新:
import std.stdio;
import core.thread;
// version = input;
enum inputPeriod = 10;
void main() {
foreach (i; 1 .. 10_000) {
Thread.sleep(10.msecs);
write(' ', i);
version (input) {
if(i%inputPeriod==0){
write("输入符: ");char c;
readf(" %s", &c);
}
}
}
}
浙公网安备 33010602011771号