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);
      }
    }
  }
}
posted @   zjh6  阅读(10)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示