为什么readf没有按预期运行?

Arl*_*len 6 d dmd

import std.stdio;

void main(){

  int n;
  while(readf("%d", &n)){
    if(n == 11)
      break;
    writeln(n);
  }
}
Run Code Online (Sandbox Code Playgroud)

第一次迭代工作,并打印n,但之后readf()永远不会返回.

该文档只有一行解释readf():

uint readf(A ...)(以char []格式,A args);

   For­mat­ted read one line from stdin.
Run Code Online (Sandbox Code Playgroud)

我做错了吗?或者有什么问题readf()吗?我只需要从标准输入中读取数字.

使用:DMD 2.054 64位

Pet*_*der 9

我相信这是因为readf处理空间的方式不同于scanfC语言.你需要明确地读取空格,所以readf("%d", &n)改为readf("%d ", &n),它应该工作(希望如此).

以下是Andrei的引用,他实现了这个功能:

这是设计的.该示例在修改时如下工作:

import std.stdio;

void main(){
int i,j;
readf("%s",&i);
readf("%s",&j);
}

第二个参数之前的空格告诉readf在尝试转换之前读取并跳过所有空格.

为了提高精度,我已经实现了readf,这是一个比scanf更多的关于空白的纳粹.Scanf一直很难用于复杂的输入解析和验证,我将其中一些归因于它对空白的自由放任态度.如果有足够的证据表明这对我们的大多数用户有用,我会很高兴放松一些readf对精确空白处理的坚持.我个人认为目前的行为(严格来说,很容易放松)是最好的.

http://www.digitalmars.com/d/archives/digitalmars/D/bugs/Issue_4656_New_stdio.readf_does_not_ignore_white_space_24214.html