C语言编程:用于赋值给数组的循环函数



我在C中有以下函数,它以整数作为输入(例如,数字1000),将该数字分成单个数字(在本例中为1,0,0,0),并将每个数字分配给一个名为digits的数组:

int splitnumber(int x)
{
    temp=x;
    while(temp)
    {
        temp=temp/10;
        factor = factor*10;
    }
    while (factor>1)
    {
        factor = factor / 10;
        digits[i]= x/factor;
        x = x % factor;
       i = i + 1;
    }
}

这第一次工作得很好,但如果我在循环中使用它,似乎数字数组每次都没有改变,它仍然保持与第一次相同的值。当我只是简单地尝试再次使用一个新数字的函数时,它仍然挂在第一次尝试的结果上。下面是我要使用的循环:

do
{
    splitnumber(number);
    lowhigh = sort_lowtohigh(digits);
    highlow = sort_hightolow(digits);
    printf ("nnLoop number is:%dn", number);
    printf ("High to Low is: %dn", highlow);
    printf ("Low to high is: %d", lowhigh);
    printf("n");
    printf ("Subtraction is: %d", subtraction(highlow, lowhigh));
    number++;
} while (number <= 1020);

正如您所看到的,我还使用了其他几个使用数字数组的函数。这些函数似乎工作得很好,但第二次通过循环时没有产生正确的结果,因为数字数组没有改变。下面是输出:

<>之前环路编号为:1001高到低为:1100从低到高是:11减法是:1089循环号为:1002高到低为:1100从低到高是:11减法是:1089循环号为:1003高到低为:1100从低到高是:11减法是:1089之前

循环对数字计数器进行加1操作,但是数字数组没有被更新。

我在你的代码中看到一些问题(可能导致描述的行为):

在你的函数"splitnumber(int x)":

  • 没有局部变量(temp, i, factor)
  • "i"从未初始化!
  • 无返回值

我相信,变量I(可能是全局声明的)导致了您的问题。每次调用"splitnumber"时,i将递增。在splitnumber的第一次调用期间,i可能是0,并且在调用期间将增长到3。这将影响数字形式的前4个条目(可能再次全局声明为int[4])。当您第二次调用splitnumber时,i仍然是4。所以这次你改变了数字[4 5 6和7]的值。

如果我猜对了,你很幸运,你的程序不会因为分割错误而崩溃。你试图访问内存(所有数字[i];I> 3)你从未分配过。

只是添加一个

i = 0;
splitnumber开头的

将解决您的问题。在函数中使用局部变量可能会解决更多的问题。

由于isplitnumber中没有初始化为0,因此您只需要设置digits的每个元素一次…后续调用将超出数组的边界。

最新更新