关于for循环的问题

求1!+2!+3!


```c
int main()
{
    int i = 0;
    int n = 0;
    int ret = 1;
    int sum = 0;
    for (n = 1; n <= 3; n++)
    {
        //ret = 1;
        for (i = 1; i <= n; i++)
        {
            ret = ret * i;
        }
        sum = sum + ret;
    }
    printf("sum= %d\n", sum);
    return 0;
}


为什么这里不加一个ret=1,输出值就不是9而是15,   "for (n = 1; n <= 3; n++)"这一串代码n++后的值赋到下面i<=n那里去吗

在这段代码中,ret是计算每个阶乘的结果,而sum是把所有阶乘的结果加起来的和。如果在计算下一个阶乘之前没有将ret重置为1,那么在计算后面的阶乘时,ret的值将保留之前的结果,从而导致错误的计算。所以在每次计算一个新的阶乘时,需要将ret重置为1。

至于您的第二个问题,n++后的值会被赋给下一次循环的n,不会影响内层循环的i的范围。在每一次外层循环时,内层循环都会重新从1开始执行,所以i的范围仍然是1到n。