while循环中正确的scanf

问题描述 投票:1回答:2

我的代码:

while(scanf("%f", &number) && number > 0) 
while(scanf("%f", &number) == 1 && number > 0)

== 1是什么,这是必需的吗?

c loops while-loop scanf
2个回答
1
投票

Weather Vane中的comments所述,如果==1返回将被评估为scanf()EOF(文件末尾或-1),并且[[ C0]与上一次迭代保持不变,true循环的条件将评估为number

这不适当,因为我们在扫描过程中出错,并且条件应该为whiletrue


0
投票

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中。

  1. 第一个相信返回值是EOF,否则它是从未初始化的内存中读取的。
  2. 第二个考虑了number1。如果数字不是1,则会短路,然后重新启动。如果输入0并且返回值为-1(在类似UNIX的终端上为Ctrl-D),这将导致永远等待,因为它结束了输入。
© www.soinside.com 2019 - 2024. All rights reserved.