void main(void)
{
int i;
for(i=1;i<=5;i++)
{
if(i/5)
continue;
printf("%d",i);
}
}
我的简单查询是,如果“if”中的条件被评估为分数,它是否被视为0?这里的输出是1234,所以当条件是1 / 5,2 / 5,3 / 5时, 4/5它是i的值,当5/5 = 1时它正在执行continue语句。
答案 0 :(得分:6)
i/5
将被视为整数除法(当然i
为int
),无论它出现在哪里(if
或其他)。所以两个整数之间的/
实际上会给你商数。
i / 5
会在0
时提供i ∈ {0, 1, 2, 3, 4}
,1
时提供i = 5
。
当if
语句的条件表达式为continue
时,true
语句执行条件语句(在本例中为false
语句)。整数值按如下方式转换为布尔值:零变为true
,任何其他值变为i==5
。由于表达式在{{1}}之前不会计算为非零值,因此在此之前不会执行条件语句。
答案 1 :(得分:2)
每当你有
if ( expr )
并且expr
显然不是真的/假的,你总能这样想:
if( (expr) != 0)
因此,如果expr
评估为分数,那么只要分数不等于0,条件将评估为真。
但是,在您的示例中,由于i
是一个整数,i/5
将执行整数除法,它将永远不会给出分数。如果i
小于5,i/5
将为0,最终会使条件为假。