当 if 语句中的条件是小数时
When condition inside if statement is fractional
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 语句。
i/5
将被视为整数除法(当然当 i
是 int
时),无论它出现在(if
或其他)中的何处。所以两个整数之间的 /
实际上会给你商数。
i / 5
在 i ∈ {0, 1, 2, 3, 4}
时给出 0
,在 i = 5
.
时给出 1
if
语句在其条件表达式为 true
时执行条件语句(在本例中为 continue
语句)。整数值按如下方式转换为布尔值:零变为 false
,任何其他值变为 true
。由于表达式直到 i==5
才计算为非零值,直到那时才执行条件语句。
只要你有
if ( expr )
而 expr
显然不是 true/false 的东西,你总是可以这样想:
if( (expr) != 0)
因此,如果 expr
的计算结果为小数,那么,只要小数不等于 0,条件就会计算为真。
但是,在您的示例中,由于 i
是一个整数,i/5
将进行整数除法,而不会给出分数。如果 i
小于 5,i/5
将为 0,这最终会使条件为假。
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 语句。
i/5
将被视为整数除法(当然当 i
是 int
时),无论它出现在(if
或其他)中的何处。所以两个整数之间的 /
实际上会给你商数。
i / 5
在 i ∈ {0, 1, 2, 3, 4}
时给出 0
,在 i = 5
.
1
if
语句在其条件表达式为 true
时执行条件语句(在本例中为 continue
语句)。整数值按如下方式转换为布尔值:零变为 false
,任何其他值变为 true
。由于表达式直到 i==5
才计算为非零值,直到那时才执行条件语句。
只要你有
if ( expr )
而 expr
显然不是 true/false 的东西,你总是可以这样想:
if( (expr) != 0)
因此,如果 expr
的计算结果为小数,那么,只要小数不等于 0,条件就会计算为真。
但是,在您的示例中,由于 i
是一个整数,i/5
将进行整数除法,而不会给出分数。如果 i
小于 5,i/5
将为 0,这最终会使条件为假。