尽管达到了休息状态,但无限循环

时间:2014-02-08 23:42:59

标签: c

我有以下代码:

unsigned int calcFact(int input)
{
    int flag = 0;
    int temp = input-1;
    int i;
    unsigned int factorial = input;

    for(;;)
    {
        factorial = factorial * temp;
        temp = temp - 1;
        printf("%d\n",temp);
        if(temp == 1)
        {
            printf("%d\n",temp);
            break;
        }
    }

    return (factorial);
}

如您所见,这是一个计算输入因子的简单程序。但是,它永远不会脱离循环。 temp变为1(我用第一个print语句检查过)。但是,第二个语句永远不会打印,这意味着它永远不会进入if条件。这非常令人费解。

我做了另一种方式,得到了我想要的东西。但是,我想知道C是否存在导致错误的基本原因?

编辑:更改了订单。我把东西搬了很多东西,我搞砸了。重点仍然存在。无论如何,循环永远不会破坏

无论print语句在何处,它都不会改变循环永不中断的事实。那是真正的问题。可能是我没有说清楚。我正在使用print语句进行调试。它仍然在循环中继续。温度变为2 ... 1 ... 0然后-2 ^ 16。

1 个答案:

答案 0 :(得分:2)

在退出条件下,break;之前会调用printf("%d\n",temp),这意味着它会在执行该语句之前突破for循环。

说“......第二个语句从不打印,这意味着它永远不会进入if条件”是不正确的,因为它确实进入了if条件,你只是不知道它。将break;放在printf之后,您会看到。