【问题标题】:When condition inside if statement is fractional当 if 语句中的条件为小数时
【发布时间】:2017-05-29 22:33:43
【问题描述】:
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 是一个整数除法(没有浮点操作数),因此结果被截断(小数部分被丢弃)。
  • 如果你只想了解除法运算,为什么还要问一些“if inside if”的东西呢?在任何其他地方也将以相同的方式进行划分。

标签: c if-statement output continue


【解决方案1】:

i/5 将被视为整数除法(当i 当然是int 时),无论它出现在哪里(if 或其他)。所以两个整数之间的/ 实际上会给你商。

i / 5 将在i ∈ {0, 1, 2, 3, 4}1 时给出0i = 5 时。

if 语句在其条件表达式为true 时执行条件语句(在本例中为continue 语句)。整数值转换为布尔值,如下所示:零变为false,任何其他值变为true。由于表达式在i==5 之前不会计算为非零值,因此在此之前不会执行条件语句。

【讨论】:

  • “零变为真,任何其他值变为假” - 你确定你的意思不是相反吗?
【解决方案2】:

只要你有

if ( expr )

expr 显然不是真/假,你总是可以这样想:

if( (expr) != 0)

因此,如果 expr 的计算结果为小数,那么只要小数不等于 0,条件就会计算为真。

但是,在您的示例中,由于 i 是一个整数,i/5 将进行整数除法,它永远不会给出分数。如果i 小于 5,i/5 将为 0,这最终会使条件为 false。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多