![]() |
1
26
在C中,0的值为false,其他值为true。因此,如果scanf返回EOF,这是一个负值,则循环的计算结果将为true,这不是您想要的结果。 |
![]() |
2
10
自
一眼就能看清楚
将在第一次无法匹配两个值时退出循环,原因可能是文件结束或文件结束(
当然,
编辑:
已更正错误:
关键是因为任何非零值
我再怎么强调也不为过
|
![]() |
3
3
您正确理解了C代码。 有时,测试读取的项目数的原因是有人希望确保所有项目都已读取,而不是scanf在输入与预期类型不匹配时提前退出。在这种特殊情况下,这并不重要。 通常scanf是一个糟糕的函数选择,因为它不能满足人类用户交互输入的需要。通常,fgets和sscanf的结合会产生更好的结果。在这种特殊情况下,这并不重要。
另一方面,您的替代代码并不完全是替代代码。如果scanf返回-1,那么while循环将执行。 |
![]() |
4
1
首先,通过与1比较,它变成一个显式布尔值(true或false)。如果不进行比较,您将在一个整数上进行测试,该整数在C中有效,但在以后的语言(如C#)中无效。 第二,有些人会用while([function])而不是while([return value])来阅读第二个版本,并且在测试一个函数时会暂时感到困惑,因为很明显,测试的意思是测试返回值。 这完全是个人喜好的问题,就我而言,两者都是有效的。 |
![]() |
5
1
此外,通常可以省略的比较通常是与
零
在任何情况下,当比较可以安全地省略并且您实际省略它时,条件的实际语义保持不变。如果这是您所担心的,那么它对结果代码的效率绝对没有影响。 |
![]() |
Kagemand Andersen · 用C替换文本文件中的行 6 年前 |
![]() |
Adam Grey · If/else语句仅适用于整数。 7 年前 |
![]() |
Tchae · C中的scanf十六进制到uint8\u t[重复] 7 年前 |