2013-03-14 20 views
0

我在C中有一个以整数作为输入的函数(例如数字1000),将数字拆分为单个数字(所以1,0,0,0,0这种情况下),并且每个数字对阵列称为数字:C编程:分配给数组的循环函数

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 ("\n\nLoop number is:%d\n", number); 
    printf ("High to Low is: %d\n", highlow); 

    printf ("Low to high is: %d", lowhigh); 

    printf("\n"); 

    printf ("Subtraction is: %d", subtraction(highlow, lowhigh)); 

    number++; 
} while (number <= 1020); 

正如你所看到的,我使用的是一对夫妇的其它功能。这些函数似乎工作正常,但由于数组数组没有变化,第二次通过循环时不会产生正确的结果。以下是输出:

 
Loop number is:1001 
High to Low is: 1100 
Low to high is: 11 
Subtraction is: 1089 

Loop number is:1002 
High to Low is: 1100 
Low to high is: 11 
Subtraction is: 1089 

Loop number is:1003 
High to Low is: 1100 
Low to high is: 11 
Subtraction is: 1089 

该循环正在递增数字计数器,但是,数字数组又没有被更新。

+0

“digits”数组声明在哪里?它在哪里清除? – Mike 2013-03-14 18:01:13

+0

“因子”和“我”初始化在哪里?请始终发布您运行的**实际代码**,包括所有声明/定义。 – 2013-03-14 18:13:44

回答

0

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

在你的函数 “splitnumber(INT X)”:

  • 您没有本地变量(TEMP,我,因子)
  • “我”从未初始化!
  • 没有返回值

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

如果我的猜测是正确的,那么幸运的是,您的程序不会因分段错误而崩溃。你正在尝试访问内存(数字[i]; i> 3),你从来没有分配过的内存。

在splitnumber之初将解决您的问题,只要添加一个

i = 0; 

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

+0

谢谢!你是对的,我= 0被全球宣布。在函数内部移动它解决了这个问题。 – jj2170937 2013-03-14 18:24:08

0

由于i未初始化为0splitnumber中,您将只设置每个元素digits一次...后续调用将超出数组边界。