for (i = 0; isspace(s[i]); i++) { ... }
上面的for
循环是第61页上用于将字符串转换为K& R中的整数的程序的一部分。
for
循环没有条件检查。它是如何工作的?
答案 0 :(得分:2)
只要条件表达式的计算结果为0,循环就会终止。例如,如果您看到i < 3
这样的表达式,则可以将其视为(i < 3) != 0
。所以在这种情况下,它isspace(s[i]) != 0
意味着它终止于第一个不是空格的字符。
答案 1 :(得分:1)
isspace(s[i])
是条件,因为它为&#39; false&#39;返回零值。 (即所提供的字符不是空格字符),并且&#39; true&#39;的非零值。在这种情况下,只存在一个空格字符,但在其他函数中,例如isalpha
或isalphanum
,非零值意味着不同的东西,如1意味着它是一个大写字母(所以它是一个字母字符),或2意味着它是一个小写字母)等等(我可能将这些数字混合起来:/)。
换句话说,for
循环将此函数视为返回布尔值,与大多数其他表达式一样,这意味着它将零值视为false
,非零视为true
}。
答案 2 :(得分:0)
首先,你要走出界限,这会给你一个段错误。您只是增加i
,但不检查它是否仍然在边界内。例如,如果s
等于" "
怎么办? isspace(i[0])
将返回非零值(视为true),循环将继续,并将尝试访问s
的第二个(不存在!)值。您最好添加另一张小支票:for (i = 0; (i<SIZE_OF_S) && isspace(s[i]); i++) { ... }
现在让我们谈谈失踪的情况。不,它没有遗漏,它在这里:isspace(s[i])
。此函数检查s[i]
是否被视为空格。如果是,则返回非零值,否则返回0
(docs)。所以,它是缺失的条件,只是略有不同的形式(也许你已经习惯了不同的比较,但是还有很多方法。
答案 3 :(得分:0)