【问题标题】:why does this print? (C language)为什么要打印? (C语言)
【发布时间】:2011-10-05 12:26:59
【问题描述】:

为什么下面的代码会运行 while 循环?我认为“mid = term”是一项任务,而不是一个条件?请解释。谢谢。

#include <stdio.h>

main ()
{
    int mid = 4, term = 4;

    while ( mid = term)
    printf("%d\n", --term);
}

【问题讨论】:

    标签: c loops printing while-loop


    【解决方案1】:

    因为表达式的计算结果为真。

    基本上,你说的是mid = 4

    由于任何不为零的 int,在条件语句中返回 true - while 将循环。

    【讨论】:

    • 它不会永远循环,只会循环 4 次。分配将在while 循环的每次迭代中进行评估,并且由于term 在循环内递减,所以当term == 0 时它将退出
    【解决方案2】:

    您将term 的值分配给mid,然后while 会检查mid 的值,结果为真,直到达到0。

    这应该输出:

    3
    2
    1 
    0
    

    【讨论】:

      【解决方案3】:

      您将term 分配给mid,然后测试mid 的真实性。 mid 在非零时为真。当term(因此mid)减到等于0时循环终止,这是假的。

      【讨论】:

        【解决方案4】:

        表达式mid = term 在赋值后实际上计算为mid 的值。所以,正在评估的是while(4)。由于所有非零整数都被解释为true(这是一种简化),while 循环将一直运行到term != 0

        【讨论】:

          【解决方案5】:

          赋值也是持有值的表达式:它们赋值的值。 mid=0 是一个 evals 为 0 的表达式(因此为 false)。

          【讨论】:

            【解决方案6】:

            赋值和测试都发生在“while”循环中,所以在这种情况下printf()会执行四次。

            【讨论】:

              【解决方案7】:

              mid = term 是一个计算结果为term 的表达式。所以while循环会一直运行到term = 0

              【讨论】:

                【解决方案8】:

                赋值的结果就是值。因此,表达式的计算结果为 4 或非零值,因此在 C 中为 TRUE

                【讨论】:

                  猜你喜欢
                  • 2017-08-07
                  • 2019-06-03
                  • 2010-10-23
                  • 2017-07-31
                  • 1970-01-01
                  • 2015-04-26
                  • 2016-03-25
                  • 2016-09-19
                  • 2011-04-22
                  相关资源
                  最近更新 更多