2014-03-02 56 views
0

我想寫一些簡單的代碼來驗證數組中每個數字有多少個數字,但是我陷入了一些奇怪的行爲。C - while和for循環的奇怪行爲

來自陣列的前3個數字要麼在while循環中評估爲false,這意味着(120/1)%10等於0,這不應該是真的,或者其他方面是錯誤的。

你有什麼想法嗎?算法在陣列中的第三個數字之後按預期工作。

感謝您提前提出建議。

int main(){ 

    int nums[SIZE] = {120,210,3,4375,54443}; 
    int i; 

    for (i = 0; i < SIZE; ++i){ 

     printf("Var i inside FOR: \t%d\n", i); 
     printf("Var nums i inside FOR: \t%d\n", nums[i]); 
     int wtest = 1; 
     printf("Var wtest inside FOR: \t\t%d\n\n", wtest); 

     while (((nums[i]/wtest)%10) != 0){ 
       wtest = wtest * 10; 
       printf("Var wtest iside while: \t\t\t%d\n\n", wtest);     
     } 
    } 

    getchar();    
    return 0; 

} 

輸出:

Var i inside FOR: 0 
Var nums i inside FOR: 120 
Var wtest inside FOR:  1 

Var i inside FOR: 1 
Var nums i inside FOR: 210 
Var wtest inside FOR:  1 

Var i inside FOR: 2 
Var nums i inside FOR: 3 
Var wtest inside FOR:  1 

Var wtest iside while:   10 

Var i inside FOR: 3 
Var nums i inside FOR: 4375 
Var wtest inside FOR:  1 

Var wtest iside while:   10 

Var wtest iside while:   100 

Var wtest iside while:   1000 

Var wtest iside while:   10000 

Var i inside FOR: 4 
Var nums i inside FOR: 54443 
Var wtest inside FOR:  1 

Var wtest iside while:   10 

Var wtest iside while:   100 

Var wtest iside while:   1000 

Var wtest iside while:   10000 

Var wtest iside while:   100000 
+0

爲什麼'(120/1)%10)== 0'在你看來不是真的? –

+0

什麼似乎是(120/1)%10的問題? – Eutherpy

+1

這看起來對我來說是正確的,因此'120/10 = 12'因此'120%10 = 0' – DairyLea

回答

1

你的代碼邏輯是錯誤的。通過測試除法的餘數10,實際上檢查相應位置的數字是否爲零 - 最後一位數字爲120和210的情況就是這種情況。最後一位數字是您首先檢查的數字。

您應該只檢查分工的結果是否我爲零:

int wtest = 1; 

while (nums[i]/wtest != 0) { 
     wtest = wtest * 10; 
} 

該部門僅產生零,如果nums[i]小於wtest,所以你可以改寫這個來:

int wtest = 1; 

while (nums[i] > wtest) { 
     wtest = wtest * 10; 
} 

這當然不會給你數字計數,但是十位數的最小次數大於你的數字。

0

INT主(){

int nums[SIZE] = {120,210,3,4375,54443}; 
int i; 

for (i = 0; i < SIZE; ++i){ 

    printf("Var i inside FOR: \t%d\n", i); 
    printf("Var nums i inside FOR: \t%d\n", nums[i]); 
    int j = 0; 
    int n = nums[i]; 
    do 
     { 
     n=n/10; 
      j++; 
     }while(n!=0);     
    } 
} 

getchar();    
return 0; 

}

在這裏,do-while循環將在數計數的數字個數,數字0將被算作1使用做的原因而不是僅僅一會兒。希望這可以幫助你。