C 循环内的值不递增

C 循环内的值不递增,c,C,退出循环后,循环nn的内的值变为0。我希望它会像循环中所描述的那样递增。退出后如何使nn保存其值 void branch(int *numbers, int left) { Int nb, nn; nb = 0; nn = 0; if (left != 0) for (int branchn = 1; branchn <= left; branchn++) { for (int index = 1; index &l

退出循环后,循环
nn
内的值变为
0
。我希望它会像循环中所描述的那样递增。退出后如何使
nn
保存其值

void branch(int *numbers, int left) {
    Int nb, nn;
    nb = 0;
    nn = 0;

    if (left != 0)
        for (int branchn = 1; branchn <= left; branchn++) {
            for (int index = 1; index <= branchn; index++) {
                *(buffer + nb) = *(buffer + nb) * 10 + *(numbers + nn++);
                printf("%d\n", nn);
            }

            nb++;
            length++;

            branch(numbers, left - 1);
        }
    else {
        branchop(length--);
        nb--;
    }
}
void分支(整数*数字,整数左){
Int nb,nn;
nb=0;
nn=0;
如果(左!=0)

对于(int branchn=1;branchn实际上,它是按设计工作的


您正在递归调用
branch()
branch()
将在方法启动时将
nn
设置为
0
。当您最终离开递归
branch()
时,
nn
将在
for()
循环中具有指定的递增值。

实际上,它按设计工作


您正在递归调用
branch()
branch()
将在方法启动时将
nn
设置为
0
。当您最终离开递归
branch()
时,
nn
将在
中为()
循环。

您的代码存在多个问题,其设计非常混乱:

  • 什么是
    Int
  • buffer
    length
    branchop()
    的定义是什么
  • 为什么使用基于1的偏移量?数组索引在C中基于0
  • 为什么使用递归
  • nn
    nb
    是本地变量,自动存储在
    branch()
    中;每个新的递归调用都有自己的一组变量。您可能希望使这些
    成为静态的
    ,以便所有调用(包括递归调用)共享它们,但代码将变得更加复杂

我无法提供代码的更正版本,因为您没有给出任何关于它应该实现什么的线索,并且很难从发布的片段中分辨出来。

您的代码有多个问题,其设计非常混乱:

  • 什么是
    Int
  • buffer
    length
    branchop()
    的定义是什么
  • 为什么使用基于1的偏移量?数组索引在C中基于0
  • 为什么使用递归
  • nn
    nb
    是本地变量,自动存储在
    branch()
    中;每个新的递归调用都有自己的一组变量。您可能希望使这些
    成为静态的
    ,以便所有调用(包括递归调用)共享它们,但代码将变得更加复杂

我无法提供该代码的更正版本,因为您没有给出任何关于它应该实现什么的线索,并且很难从发布的片段中分辨出来。

您可以将其设置为
静态
。或者更好的做法是将其作为参数传递给函数。或者更好的做法是,摆脱这个无效的代码,这可能会导致优化,并将其全部替换为一个简单的for循环。您可以使其成为
静态的
。或者更好地将其作为参数传递给函数。或者更好的是,摆脱这个无效的代码,它可能会或可能不会进行尾部优化,并将其全部替换为一个简单的for循环。