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 args);
Formatted read one line from stdin.
我做错了吗?或readf()
有什么问题吗?我只需要从标准输入中读取数字。
使用:DMD 2.054 64位
答案 0 :(得分:9)
我认为这是因为readf
处理空格的方式与C中的scanf
不同。您需要明确读取空格,因此将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对精确的坚持 如果有足够的证据证明这是最有用的空白处理 我们的用户我个人认为目前的行为(严格 默认情况下,容易放松)是最好的。