为什么 readf 的行为不符合预期?
import std.stdio;
void main(){
int n;
while(readf("%d", &n)){
if(n == 11)
break;
writeln(n);
}
}
第一次迭代有效,它打印 n
,但之后 readf()
永远不会返回。
该文档只有一行解释 readf() :
uint readf(A...)(char[] 格式,A 参数);
格式化从标准输入读取一行。
我做错了什么吗?或者 readf() 有问题吗?我只需要从标准输入读取数字。
使用:DMD 2.054 64 位
import std.stdio;
void main(){
int n;
while(readf("%d", &n)){
if(n == 11)
break;
writeln(n);
}
}
The first iteration works, and it prints n
, but after that readf()
never returns.
The documentation has only a single line explaining readf()
:
uint readf(A...)(in char[] format, A args);
Formatted read one line from stdin.
Am I do something wrong? or is there something wrong with readf()
? I just need to read numbers from the standard input.
using: DMD 2.054 64-bit
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我相信这是因为
readf
处理空格的方式与 C 中的scanf
不同。您需要显式读取空格,因此更改readf("%d", & n)
到readf("%d ", &n)
它应该可以工作(希望如此)。以下是实现该功能的 Andrei 的一句话:
http://www.digitalmars.com/d/archives/digitalmars/D/bugs/Issue_4656_New_stdio.readf_does_not_ignore_white_space_24214.html
I believe it's because
readf
handles spaces differently thanscanf
in C. You need to explicitly read in the spaces, so changereadf("%d", &n)
toreadf("%d ", &n)
and it should work (hopefully).Here's a quote from Andrei, who implemented the function:
http://www.digitalmars.com/d/archives/digitalmars/D/bugs/Issue_4656_New_stdio.readf_does_not_ignore_white_space_24214.html