我的代码:
while(scanf("%f", &number) && number > 0)
while(scanf("%f", &number) == 1 && number > 0)
== 1
是什么,这是必需的吗?
如Weather Vane中的comments所述,如果==1
返回将被评估为scanf()
的EOF
(文件末尾或-1),并且[[ C0]与上一次迭代保持不变,true
循环的条件将评估为number
。
这不适当,因为我们在扫描过程中出错,并且条件应该为while
或true
。
从false
引用,
成功完成后,这些功能应返回成功匹配和分配输入项;这个数字可以为零如果出现早期匹配失败。如果输入之前结束第一次匹配失败或转换时,应返回EOF。如果一个发生读取错误,已设置流的错误指示符,EOF应该返回,[GNU start]和errno应该设置为指出错误。 [GNU结束]
0
在这里,fscanf可能返回while(scanf("%f", &number) && number > 0)
while(scanf("%f", &number) == 1 && number > 0)
,scanf
或-1
,与流(0
)的末尾相对应,匹配错误,并且存储了成功匹配的浮点数在1
中。
EOF
,否则它是从未初始化的内存中读取的。number
和1
。如果数字不是1,则会短路,然后重新启动。如果输入0
并且返回值为-1(在类似UNIX的终端上为Ctrl-D),这将导致永远等待,因为它结束了输入。