2013-03-14 47 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一次...後續調用將超出數組邊界。