我有以下代码:
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。
答案 0 :(得分:2)
在退出条件下,break;
之前会调用printf("%d\n",temp)
,这意味着它会在执行该语句之前突破for循环。
说“......第二个语句从不打印,这意味着它永远不会进入if条件”是不正确的,因为它确实进入了if条件,你只是不知道它。将break;
放在printf
之后,您会看到。