如果循环执行

时间:2014-03-23 18:19:01

标签: c loops for-loop

在下面的代码中,

#include<stdio.h>
int main()
{
    int k,sum;
    for(k=7;k>=0;sum=k--)
        printf("%d \n",sum);

    return 0;
}

输出结果为:

0
7
6
5
4
3
2
1   

我想知道这个循环是如何执行的,为什么不在最后一个打印0?

6 个答案:

答案 0 :(得分:5)

在第一次迭代sum未初始化时。它具有不确定值。

C11:6.7.9初始化:

  

如果没有显式初始化具有自动存储持续时间的对象,则其值为   的不确定即可。

第6.3.2.1节说在这种情况下行为未定义

答案 1 :(得分:2)

简而言之,sum变量更新为与k相同。在更新之后,k递减1,然后循环运行

这意味着......

第一个循环,sum未初始化(因此第一个0

循环最后一次运行时,sum设置为k(1),k递减为0.循环运行。测试条件以便循环退出。

这一切都归结于此:sum=k--。如果您要执行sum=--k,则在将值分配给sum之前,k将递减

答案 2 :(得分:1)

您的程序具有未定义的行为,因为它在循环的第一轮中从未初始化的变量读取(参见C11 6.3.2.1/2)。

答案 3 :(得分:1)

以下代码:

for(k =7; k >= 0; sum = k--)
   //your code here printf("%d \n",sum);

可以扩展为:

k=7;
for(; k >= 0; ){
   //your code here printf("%d \n",sum);
   sum = k--;
}

在第一次运行中sum未初始化,因此您的程序具有未定义的行为。

答案 4 :(得分:0)

试试这个

 #include<stdio.h>
     int main()
      {
     int k=7,sum;
      for(sum=k=7;k>=0;sum=--k)

       printf("%d \n",sum);
      return 0;
       }

循环首先取总和的初始值,在这种情况下,默认情况下等于零,因此第一次迭代显示0但是在第二次迭代初始化发生并且从7开始向前0

答案 5 :(得分:0)

当k = 1时,k的值被赋值给sum,并且它被递减为0。因此sum = 1且k = 0。 现在k = 0并且根据循环条件,k> = 0为真。因此它进入循环体并将sum的值打印为1。现在k的值被赋值给sum和k递减。因此sum = 0且k = -1。但是-1&gt; = 0为假并且循环执行停止。 因此程序最后不打印0。