2012-09-01 289 views
0

下面的代碼片段從用戶處獲取一個整數(即數字),並打印該數字中所有數字的計數,但是,如果我輸入的數字在某處包含0,則它將不在while循環立即(因爲while循環條件)。我試圖修復這個錯誤,但我不能。你能幫我解決它嗎?謝謝。使用c分割數字

int count = 0; 
int rem = number % 10; 

while(rem != 0) { 
    number /= 10; 
    ++count; 
    rem = number % 10; 

}//end while 

printf("The count is %d", count); 

沒有代碼需要共享,如果你可以通過文本,我會感激。

謝謝。

回答

2

也許應該是:

while (number != 0) 

似乎你並不需要其他的東西(rem等),除非你打算做的不僅僅是統計的數字更多。無論如何,你可能需要rem = number % 10;之前的部門。

+0

感謝您的評論。 – Sinan

1

(來吧,這是elemantary學校數學!)

如果有一個零某處,然後0模10將導致0(你會得到什麼呢?),所以它自然退出循環。你想要的是檢查的人數本身是否已全部轉移到右側,因此達到0最後:

while (number != 0) 
+0

感謝您的評論。 – Sinan

2

沒有必要拿剩餘的號碼來計算每一個數字。只要保持除以10,直到你到達0:

while(number != 0) { 
    number /= 10; 
    ++count; 
} 
+0

但是如果在數字中的任何一點發現0,OP都希望它停止。 – luketorjussen

+4

@luketorjussen:但這是OP提到的* bug *部分。當發現0時,他不希望它停止。 –

+0

我收回我以前的陳述,因爲它看起來我無法閱讀... – luketorjussen

1

當你輸入一個0號是因爲循環條件是rem != 0while循環結束的原因。如果你看一下,rem成爲number的最後一位數字。因此你需要while (number != 0),確保你循環每個數字。

+0

@ARS,感謝您的評論。 – Sinan

1

正如在所有4個以前的答案所提到的,該循環

while(number > 0) { 
    ++count; 
    number /= 10; 
}//end while 

另一種選擇是離開所述用戶輸入作爲一個字符串(假定作爲參數傳遞給該程序提供的數),並且只打印字符串長度,

char number[30]; 
strcpy(number,argv[1]); 
printf("The count is %d\n", strlen(number)); 
+0

謝謝亞歷克的評論。我已經採取了第一種方法。感謝您加入對話。 – Sinan