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);
Run Code Online (Sandbox Code Playgroud)Formatted read one line from stdin.
我做错了吗?或者有什么问题readf()
吗?我只需要从标准输入中读取数字.
使用:DMD 2.054 64位
我相信这是因为readf
处理空间的方式不同于scanf
C语言.你需要明确地读取空格,所以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对精确空白处理的坚持.我个人认为目前的行为(严格来说,很容易放松)是最好的.