为什么在以下for循环中没有任何条件检查?

时间:2016-03-21 16:33:36

标签: c

for (i = 0; isspace(s[i]); i++) { ... }

上面的for循环是第61页上用于将字符串转换为K& R中的整数的程序的一部分。

for循环没有条件检查。它是如何工作的?

4 个答案:

答案 0 :(得分:2)

只要条件表达式的计算结果为0,循环就会终止。例如,如果您看到i < 3这样的表达式,则可以将其视为(i < 3) != 0。所以在这种情况下,它isspace(s[i]) != 0意味着它终止于第一个不是空格的字符。

答案 1 :(得分:1)

isspace(s[i])是条件,因为它为&#39; false&#39;返回零值。 (即所提供的字符不是空格字符),并且&#39; true&#39;的非零值。在这种情况下,只存在一个空格字符,但在其他函数中,例如isalphaisalphanum,非零值意味着不同的东西,如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]是否被视为空格。如果是,则返回非零值,否则返回0docs)。所以,它是缺失的条件,只是略有不同的形式(也许你已经习惯了不同的比较,但是还有很多方法。

答案 3 :(得分:0)

是如果for循环没有条件检查,只要条件部分为零,for循环就会退出

例如

`     int i;

for (i=0; 7-i; i++)
printf("hello world \n");
getch();
return 0;

}`

参见上面的节目'i'减去每次七。只要条件部分的值为零(即7-7),循环就会退出。enter image description here